0

对于熟悉 Sage 10 的任何人,我都试图让 View Composers 在默认app/View/Composers目录之外工作。我Composers在 Sage 10 目录的父目录中有另一个目录,并通过 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

4

1 回答 1

0

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

这些正在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);
        }
    }
    ...
}
于 2021-11-05T20:00:10.953 回答