【问题标题】:Roots Sage 10 using view Composers outside of app directoryRoots Sage 10 在应用程序目录之外使用视图作曲家
【发布时间】:2021-04-30 07:32:13
【问题描述】:

对于熟悉 Sage 10 的任何人,我试图让 View Composers 在默认的 app/View/Composers 目录之外工作。我在 Sage 10 目录的父目录中有另一个目录Composers,并通过 PSR-4 正确加载了它。这工作正常。

但是,它似乎不起作用。我想知道我是否必须在某个地方注册我的“自定义”Composer 目录,但是 Sage 10 上的文档非常肤浅,甚至根本不存在。

所以在我的 Sage 目录的父目录中,有一个 Composers 目录通过 PSR-4 加载,其中包含一个 Application.php,如下所示:

<?php

namespace Composers;

use \Roots\Acorn\View\Composer;

class Application extends Composer
{

    /**
     * List of views served by this composer.
     *
     * @var array
     */
    protected static $views = [
        'partials.header',
    ];

    /**
     * Data to be passed to view before rendering.
     *
     * @return array
     */
    public function with()
    {
        return [
            'someVar' => $this->sayHello(),
        ];
    }

    public function sayHello()
    {
        return 'Hello from Composer';
    }
}

我尝试通过添加(没有任何运气)在 Sage 10 的视图配置中添加视图编写器

'composers' => [
    Composers\Application::class,
],

有谁知道在哪里“注册”这些自定义作曲家?我必须注意 PSR-4 正在正确地自动加载类。

编辑 Sage 10 存储库可以在这里找到:https://github.com/roots/sage

【问题讨论】:

    标签: php wordpress psr-4 roots-sage


    【解决方案1】:

    对未来开发者的回应:发现他们的话语稍微好一点。

    这些在Roots\Acorn\View\ViewServiceProvider 类中加载。该方法检查以确保您设置的配置数组在加载之前是关联的,与Arr::isAssoc

    所以这会检查以确保数组有键,但它不使用它们。也许它们在其他地方是相关的...... ::耸肩::

    /**
     * Attach View Composers
     *
     * @return void
     */
    public function attachComposers()
    {
        $composers = $this->app->config['view.composers'];
    
        if (is_array($composers) && Arr::isAssoc($composers)) {
            foreach ($composers as $composer) {
                $this->view()->composer($composer::views(), $composer);
            }
        }
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 2017-08-04
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多