9

我有一个这样的导航栏。

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

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

4

3 回答 3

13

似乎 Laravel 中的通配符有效。到目前为止,它们还没有记录。

View::composer('admin.layouts.*', function($view)
{
     if (Sentry::check()) $view->with('navigation', View::make('admin._partials.navigation'));
     else                 $view->with('navigation', null);
});

这就是我一直在寻找的。

更新:这是一个替代解决方案

您还可以将其绑定到布局,因此扩展该布局的所有子视图都将受益于 composer。

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

于 2013-05-31T05:46:16.910 回答
3

您可以使用View::share('variable', 'value')在所有视图中共享变量。

于 2013-05-29T09:52:28.477 回答
0

正如 Aristona 所说(感谢您的建议!):允许使用通配符。浏览代码,我们可以看到 Composer 是如何成为事件侦听器的,并且在文档的该部分中指出:通配符事件侦听器。

最终,添加一点点Str::is()用于Events\Dispatcher检测通配符侦听器。例如,像这样:

str_is('namespace::*.view', 'namespace::folder.view')

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

于 2014-04-01T19:59:08.340 回答