如何将 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
我想将 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