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