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

How to move Bundle/Resources folder to a subfolder in Symfony?

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

为此,我想将 Bundle/Resources 文件夹(包含视图、配置和 public)连同控制器 类 移动到子文件夹中。

带有 DemoBundle 和消息模块的示例。目录应该是这样的:

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

我可以通过像这样在 routing.yml 文件中输入来移动控制器:

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

控制器现在看起来像这样:

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,
        ]);
    }
}

当我现在导航到这条路线时,出现错误:"Unable to find template"。该错误表明它仍在 /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 中组织管理界面。

具有命名空间模板引用的 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/consoleassets:install