使用通配符绑定View :: composer以匹配所有视图?

时间:2013-05-23 10:43:05

标签: php laravel laravel-3

我有这样的导航栏。

<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);
});

如果有更好的选择,我也想听听它们!

3 个答案:

答案 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')

简而言之,我同意这不会伤害一个小的信息性短语:)