我对如何在Laravel中工作View Composers感到有点困惑,我想我可能会问一些建议。
例如,我的网站有计划,在计划表中我有通常的ID等等但我也有'space_allowed'代表我的数字,我代表'无限'为NULL,所以我不必改变我的任何(计数)功能。
所以,在我的控制器里我有类似的东西
$plans = Plan::where('is_active', 1)->get();
return view('pricing', ['plans' => $plans]);
现在,当我在视图中时,我只是@foreach了解计划并吐出细节。
但是,因为我将'无限'空间存储为NULL,所以视图会反映出来。
所以我认为,因为不好引用整个网站,所以检查值是否为空是一个好主意,如果是,则返回'无限',如果值为空,则只是在一个地方吐出来。
因此,视图作曲家的想法。
所以我创建了ComposerServiceProvider.php,添加了启动和注册方法,在启动方法中我有以下内容:
View::composer('*', function ($view) {
});
所以我认为即将到来。
但我很遗憾如何实现该闭包中的代码来检查storage_allowed是否为null
非常感谢任何帮助。
答案 0 :(得分:2)
您只能通过复制大量数据在视图编辑器中执行此操作,因此只需在Blade模板中执行此操作:
{{1}}
答案 1 :(得分:2)
有时候有用的东西是纯粹为了显示而添加属性。 我通常用" nice"后缀这些。所以在你的情况下
class Plan extends Model {
public function getSpaceNiceAttribute(){
return is_null($this->space) ? 'Unlimited' : $this->space;
}
}
然后在您的模板中,您可以使用{{ $plan->space_nice }}
这种方法的好处是它可以在任何需要此逻辑的地方保持输出一致,而不是在模板中的任何地方复制它,并允许更多的条件(例如,如果你想显示"无"而不是" 0"您可以使用此功能,所有模板都会反映出来。)
答案 2 :(得分:0)
对你来说可能有点晚了,但我会发布以供将来参考。无论您从控制器传递给视图的是什么,都可以在您在composer方法中访问的闭包中访问。因此,例如,如果您有一个从控制器传递的页面变量,您将能够从闭包中访问它,如下所示:
public function compose(View $view)
{
$page = $view->getData()['page'];
$data = ['menu' => $this->generateSideBarHTML($page)];
$view->with($data);
}
现在,您可以从刀片模板访问$菜单。 对于你的例子,它将是这样的:
public function compose(View $view)
{
$plans = $view->getData()['plans'];
//Iterate on the plans here...
$view->with($data);
}