我有这样的导航栏。
<li>Account</li>
<ul>
<li>Register</li>
<li>Login/li>
...
我想根据Auth::check()
动态更新此内容。例如,如果用户已登录,则“帐户”将更改为“我的个人资料页面”,子女孩将被替换为适当的数组。
我需要在我的控制器中不编辑View::make calls
的情况下执行此操作。它看起来很糟糕。
这样的解决方案正是我正在寻找的;
View::composer('home.*', function($view) {
if(Auth::check())
return $view->nest('accountArea', 'home.navigation-loggedIn', null);
else
return $view->nest('accountArea', 'home.navigation-visitor', null);
});
如果有更好的选择,我也想听听它们!
答案 0 :(得分:12)
好像是Laravel的通配符。到目前为止,他们只是没有证件。
View::composer('admin.layouts.*', function($view)
{
if (Sentry::check()) $view->with('navigation', View::make('admin._partials.navigation'));
else $view->with('navigation', null);
});
这就是我要找的东西。
更新:这是另一种解决方案
您还可以将其绑定到布局,因此扩展该布局的所有子视图都将从编辑器中受益。
View::composer('admin.layouts.main_layout', function($view)
{
if (Sentry::check()) $view->with('navigation', View::make('admin._partials.navigation'));
else $view->with('navigation', null);
});
它会将作曲家绑定到@extend('admin.layouts.main_layout')
的所有视图。
答案 1 :(得分:3)
您可以使用View::share('variable', 'value')
在所有视图中共享变量。
答案 2 :(得分:0)
像Aristona所说(感谢de advice!):允许使用通配符。看一下代码,我们可以看到Composers是如何成为事件监听器,并在文档的那一部分指出:Wildcard event listeners。
最后,Str::is()
使用Events\Dispatcher
来检测Wildcar侦听器。例如,像这样:
str_is('namespace::*.view', 'namespace::folder.view')
简而言之,我同意这不会伤害一个小的信息性短语:)