Laravel中布局所需的代码放在哪里?

Where to put code required by the layout in Laravel?

从控制器渲染视图时,标准做法是将代码放在控制器中,然后将必要的变量传递给视图,以便在渲染时使用它们。

此视图通常扩展布局视图。

布局视图中需要的代码应该放在哪里,如何注入?

我以官方 Laravel 代码中的 login/register 按钮为例。 要正确呈现它们,视图中需要用户当前是否登录的信息。

在 Laravel 中看起来像这样:

@if (Auth::guest())
    <li><a href="{{ url('/login') }}">Login</a></li>
    <li><a href="{{ url('/register') }}">Register</a></li>
@else
    ...

所以视图实际上是在自己获取数据。即使代码包含在一个函数中,这也违背了我对代码分离的理解。在我的理解中,必要的数据应该传递给视图,而不是依赖任何外部方法。如果方法名称发生变化等怎么办

laravel有更好的方法吗?

比如Zend/Magento中就有一个"block"的概念。其中有一个 class 代码对应一个视图,可用于提供数据。

将它放在中间件或服务提供商中是否有意义?

老实说,我认为这绝对没问题,但如果您想将它包含在一个变量中,您需要将它放在一个视图编辑器中,您可以在其中检查当前用户是否是访客,并且然后与逻辑适用的所有视图共享该视图编辑器。

这是 L5.2 的文档:http://laravel.com/docs/5.2/views#view-composers

请注意,过去视图编辑器的共享方式略有变化,因此请务必查看所用版本的文档。