0

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

为此,我想将 Bundle/Resources 文件夹(带有视图、配置和公共)与控制器类一起移动到子文件夹中。

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

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

当我现在导航到这条路线时,我收到一个错误:“找不到模板”。该错误表明它仍在查看 /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 中组织管理界面。

4

1 回答 1

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 assets:install

于 2017-04-29T21:37:55.000 回答