树枝加载器命名空间

Rat*_*tty 1 php symfony twig

我正在慢慢重构我的代码,我在 PHP 中使用 TWIG 作为我的模板“引擎”。我的应用程序中的当前目录结构如下(PSR-4)-

src/ 
    Test/
        User/
            Resources/
                views/
     Test/
        Core/
            Resources/
                views/
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码加载 TWIG -

Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem(array(
    dirname(__DIR__). '/src/Test'
));
$twig = new Twig_Environment($loader, array(
    'cache' => dirname(__DIR__). '/app/storage/cache',
    'debug' => true,
));
Run Code Online (Sandbox Code Playgroud)

目前,它工作正常,并允许我调用每个 TWIG 文件,例如 -

echo $twig->render('User\Resources\views\partials\sidebar.html.twig', $data);
Run Code Online (Sandbox Code Playgroud)

虽然,输入所有这些很耗时,我想简化它。无论如何,Symfony 如何自动加载捆绑包?

我也尝试在我的加载程序中使用它,但是如果视图文件夹中有类似的目录,所有内容都会被找到的第一个视图覆盖。例如 - Core/Resources/views/partials/sidebar.twig 将用于代替 User/Resources/views/partials/sidebar.twig

$loader = new Twig_Loader_Filesystem(array(
            dirname(__DIR__). '/src/Test/Core/Resources/views',
            dirname(__DIR__). '/src/Test/User/Resources/views',
    ));
Run Code Online (Sandbox Code Playgroud)

想法?

谢谢!

Wou*_*r J 5

有,它被称为 Twig 命名空间:http : //twig.sensiolabs.org/doc/api.html#built-in-loaders

$loader->addPath(dirname(__DIR__).'/src/Test/Core/Resources/views', 'core');
$loader->addPath( dirname(__DIR__). '/src/Test/User/Resources/views', 'user');
Run Code Online (Sandbox Code Playgroud)

现在,你的路都是这样@user/partials/sidebar.html.twig@core/...