Laravel 5.2:如何在刀片模板中设置变量,没有 php 标签?
Posted
技术标签:
【中文标题】Laravel 5.2:如何在刀片模板中设置变量,没有 php 标签?【英文标题】:Laravel 5.2 : how to set a variable in blade template, without php tags? 【发布时间】:2016-11-03 14:48:53 【问题描述】:我可以在刀片中使用下面定义一个变量
<?php $var = var1 - var2; ?>
然后打印为
$var
但是如何使用 laravel Blade 模板方法设置变量然后使用它,基本上是 5.2 中的 @set 替代?
【问题讨论】:
按照你说的方式,用php标签。但是你不能在你的控制器里面做吗? 是的,我们可以做到这一点,但是您知道在刀片模板中设置变量而不使用 php 标签的方法吗? 为什么不在控制器中做这些事情,我猜控制器是用于所有计算/操作的东西,而视图仅用于显示输出。 @Hirendrasinh S. Rathod : 再次是的,我们可以做到这一点,但你知道在刀片模板中设置变量而不使用 php 标签的方法吗? 不,对不起,我没有,你应该尝试在 laracast 论坛上问这个问题。 【参考方案1】:有这个package for laravel 4,但由于它的作曲家文件,它与 laravel5 不兼容。一个快速的拉取请求可以解决这个问题。
包的主要部分只有三行,如果你不想为它拉入包,可以添加到你的AppServiceProvider
的启动方法中:
\Blade::extend(function($value, $compiler)
$value = preg_replace("/@set\('(.*?)'\,(.*)\)/", '<?php $$1 = $2; ?>', $value);
return $value;
);
以下是自述文件中的一些示例。
@set('my_variable', $existing_variable)
然后您可以在模板中使用变量$my_variable
。
例如,您可以选择从模板中获取一堆模型
@set('my_model_list', MyModel::where('something', '=', 1)->paginate(10))
【讨论】:
我知道@set 适用于 laravel 4。但不适用于 laravel 5.2。但正如你所说,更新很简单,意味着我需要破解包? 我已将相关代码添加到答案中,您应该可以将其复制并添加到您的AppServiceProviders
引导方法中。
您似乎正在寻找一种内置方法来执行此操作。基本上,没有因为你不应该。您应该使用视图编辑器,或者在它到达您的视图之前在其他地方进行处理。【参考方案2】:
您可以使用刀片注释语法
--*/ $var = $var1 - $var2; /*--
$var
上面的代码会被翻译成下面的sn-p
<?php /**/ $var = $var1 - $var2; /**/ ?>
阅读更多:http://laravel-recipes.com/recipes/256/assigning-a-variable-in-a-blade-template
【讨论】:
评论语法不是 -- 此评论不会出现在呈现的 html 中-- 是的,请参阅更新后的帖子。我一直找不到链接:/ 啊,我明白了,这是一种解决方法。但我没有在 laravel 5.2 文档中找到这个。 是的,正如你所说——解决方法。你也可以看看源码github.com/laravel/framework/blob/5.2/src/Illuminate/View/…【参考方案3】:试试这个,
@if($var=$var1-$var2)@endif
然后打印,
$var
【讨论】:
以上是关于Laravel 5.2:如何在刀片模板中设置变量,没有 php 标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Laravel5 中的刀片模板传递扩展主模板中的变量?
如何在 laravel、vuejs 应用程序中设置 Paystack