如何将Bundle / Resources文件夹移动到Symfony中的子文件夹?

时间:2017-04-29 20:06:02

标签: php symfony symfony-3.2

我想将Symfony3 Bundle构建成子模块。

为此,我想将Bundle / Resources文件夹(包含views,config和public)与控制器类一起移动到子文件夹中。

DemoBundle和Messages模块的示例。目录应该是这样的:

+ DemoBundle
    + Directory
    + Posts
    + Messages
       + Controller
           + MessageController.php
       + Resources
           + config
           + public
           + views
               + listing.html.twig

我可以通过像这样输入routing.yml文件来移动Controller:

demo-messages:
    resource: "@DemoBundle/Messages/Controller/"
    type:     annotation
    prefix:   /

Controller现在看起来像这样:

class MessageController extends Controller {
    /**
     * @Route("/messsages", name="Message")
     */
    public function listingAction(Request $request) {
        return $this->render('listing.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
        ]);
    }
}

当我现在导航到这条路线时,我收到一个错误:“无法找到模板”。该错误表明它仍在查看/ demo / Resources / views而不是/ demo / messages / Resources / views。

问题:我能以某种方式告诉symfony查看文件夹/ demo / messages / Resources / views吗?这有可能吗?或者我的模板在$ this-> render(...)中解决错误?

到目前为止,我们尝试了以下版本的模板参考:

return $this->render('messages/listing.html.twig', [
                'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
            ]);

效果:错误:找不到模板

~~~

return $this->render('@DemoBundle/Messages/Resources/views/listing.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
        ]);

作品!

我在每个子模块的Bundle上选择这个结构的原因是我想在这个Bundle中封装用户界面,而我想在AdminBundle中组织管理界面。

1 个答案:

答案 0 :(得分:0)

使用命名空间模板引用的Cerads解决方案有所帮助。以下代码有效:

return $this->render('@DemoBundle/Messages/Resources/views/listing.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
        ]);

使用此解决方法的缺点是不能再使用简写模板引用,并且复制资产(CSS,JS等)不适用于php bin / console资产:install