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 标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在刀片(laravel 5.3)中设置变量?

如何在 Laravel Blade 模板中设置变量

如何从 Laravel5 中的刀片模板传递扩展主模板中的变量?

如何在 laravel、vuejs 应用程序中设置 Paystack

我们如何在 laravel php 刀片模板中为 foreach 循环定义循环变量

laravel 5.2 如何在刀片中获取路由参数?