【问题标题】:Views/Resources location for Silex Twig LibrarySilex Twig 库的视图/资源位置
【发布时间】:2012-08-11 16:09:00
【问题描述】:

通常,对于 Silex 项目,我会有顶级目录,例如:

- app/
   - views/
- src/
- vendor/
- web/

现在,我的一些类可能会调用$app['twig']->render(...),它会从app/views 文件夹中拉出一个视图。

如果我提取一个库以便在多个项目中更可重用,我应该将其视图文件保存在哪里,以及如何指示 Twig 去那里查看?

同样的问题也适用于图形/样式表等,我通常会放在web/

他们肯定必须在vendor/my-lib 的某个地方才能让 Composer 干净地安装文件吗?有没有一种通用/最佳实践的方法来做到这一点?

更新 作为参考,这是我最终做的:

<?php

// in my \Silex\ServiceProviderInterface ...

/**
 * @var \Twig_Environment $twig
 */
$twig = $app['twig'];

// Add the paths to our twig templates here
$fsLoader = new \Twig_Loader_Filesystem(array(
    __DIR__.'/views/'
));

$twig->setLoader(new \Twig_Loader_Chain(array($twig->getLoader(), $fsLoader)));

谢谢。

【问题讨论】:

    标签: php twig silex composer-php


    【解决方案1】:

    我将视图存储在 src/{Library}/{Class}/View/ 下

    我将 Twig 的基本路径设置为 src

    $app->register(new TwigServiceProvider(), array(
        'twig.path' => array(
            __DIR__ . '/../src/{Library}/'
        ),
        'twig.options' => array('cache' => false, 'strict_variables' => true)
    ));
    

    在调用渲染时,我从该点传入路径

    $app['twig']->render('{Class}/View/{twigfile}.html.twig',$data);
    

    【讨论】:

    • 我喜欢这样的组织方式。我是否认为您必须在引导文件中为每个库注册一个路径,这意味着库无法注册自己的路径 - 您必须 composer update 并在安装时添加路径?
    • 我使用自动加载器将路径添加到我的库中,在 composer.json 中。例如“自动加载”:{“psr-0”:{“我的图书馆”:“src/”}}
    • 对不起,我的意思是当您调用render() 时,twig 会查找的每个目录的路径,可以很好地处理吗?
    • 哦,对了,我这样做是为了让我可以在不同的视图文件夹中拥有同名的文件,例如 index.twig.html。如果您没有重复项,您可以在注册 TwigProvider 时为每个目录设置路径。
    • 我唯一的问题是,如果其他人想使用我的库,他们必须配置路径,而实际上,他们不必了解我的代码的内部工作原理。也许可以访问$app['twig'] 有一种添加路径的方法 - 我会看看。
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多