我想将 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 中组织管理界面。