【问题标题】:Understanding Laravel View Composers: Where does my view composer belong?了解 Laravel View Composers:我的 View Composers 属于哪里?
【发布时间】:2018-02-18 00:55:39
【问题描述】:

我正在阅读 Laravel 文档以更深入地了解,这将是我第二次遇到一些困惑。

不久前,我正在观看一个 Laracasts 视频,其中我们在 AppServicesProvider 注册方法中实现了一个视图作曲家。

看起来像这样:

public function register()
{
    view()->composer('layouts.sidebar', function ($view) {
        $archives = \App\Post::archives();
        $tags = \App\Tag::has('posts')->pluck('name');
        $view->with(compact('archives', 'tags'));
    });
}

这样做的目的是使档案和标签可用于我们的侧边栏视图,几乎在每个页面中都可用。 (Laracast 视频涉及从头开始构建博客)

到目前为止一切顺利。

今天,在阅读视图编写器的文档时,我遇到了this example

/**
 * Register bindings in the container.
 *
 * @return void
 */
public function boot()
{
    // Using class based composers...
    View::composer(
        'profile', 'App\Http\ViewComposers\ProfileComposer'
    );

    // Using Closure based composers...
    View::composer('dashboard', function ($view) {
        //
    });
}

现在,我想我了解创建自己的 ComposerServiceProvider 和基于类的作曲家与基于闭包的作曲家。我困惑的根源在于,这是在 boot() 方法与 register() 方法中完成的。

这完全有可能是我写错了地方。如果我考虑一下,在register() 方法中几乎没有意义,因为 register 应该只用于注册服务。在调用所有寄存器方法后调用引导。如果有人能帮我解决这个问题,我将不胜感激!

视图作曲家属于register() 方法还是boot() 方法?和 如果它属于register()方法,是否只是巧合 它仍然对我有用吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    引用用户在this问题中给出的答案:

    启动方式和注册方式的区别?

    实际上,我昨晚刚刚从泰勒的书中了解到不同之处。 以下是关于它的摘录:

    “在所有提供程序都已注册后,它们将被“启动”。这 将在每个提供程序上触发 boot 方法。一个常见的错误,当 使用服务提供商正在尝试使用由 register 方法中的另一个提供程序。由于,在登记册内 方法,我们不能保证所有其他提供程序都已加载, 您尝试使用的服务可能尚不可用。所以,服务 使用其他服务的提供程序代码应始终存在于引导中 方法。 register 方法应该只用于,你猜对了, 向容器注册服务。在引导方法中,您 可以做任何你喜欢的事情:注册事件监听器,包含一个路由 文件、注册过滤器或任何你能想象到的东西。”

    所以寄存器一仅用于绑定。启动是实际上 触发某事发生。

    【讨论】:

      【解决方案2】:

      它们应该放在引导方法中。 register 方法并不能保证在您可能需要依赖项时解决它们。使用引导方法,您就有了保证。正如您所提到的,理想情况下您应该为视图合成器创建一个单独的服务提供者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多