我想将一个Symfony3束构造成子模块。
为此,我想将Bundle/Resources文件夹(带有视图、配置和公共)与控制器类一起移动到子文件夹中。
使用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: /主计长现在看起来如下:
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/view,而不是/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,
]);行得通!
我之所以为每个子模块选择这个结构而不是一个包,是因为我想在这个包中封装用户界面,而我想在AdminBundle中组织管理界面。
发布于 2017-04-29 21:37:55
带有名称空间模板引用的Cerads解决方案有所帮助。以下代码起作用:
return $this->render('@DemoBundle/Messages/Resources/views/listing.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
]);这种解决方法的缺点是不再可能使用短手模板引用,并且无法复制资产(CSS、JS等)。不适用于php /控制台资产:安装
https://stackoverflow.com/questions/43700012
复制相似问题