假设我有两个捆绑ParentBundle
和ChildBundle
。 ChildBundle
通过
ParentBundle
// ChildBundle/ChildBundle.php
<?php
namespace ChildBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class ChildBundle extends Bundle
{
public function getParent()
{
return 'ParentBundle';
}
}
然后,我将路由从ParentBundle
复制到ChildBundle
,并在app/config/routing.yml
中指定要使用的路由,并根据{{3}重命名routing.yml
}}
// app/config/routing.yml
child:
resource: "@ChildBundle/Resources/config/routing_child.yml"
hostname_pattern: child.example.com
prefix: /
parent:
resource: "@ParentBundle/Resources/config/routing.yml"
prefix: /
之后,我在ChildBundle
中创建了一个具有相同路径和名称的模板,以覆盖同名ParentBundle
中的模板。
但是,它会导致模板始终加载ChildBundle
。
所以,我的问题是,当用户进入child.example.com时,如何在一个域中加载ChildBundle
(即在ChildBundle
中使用覆盖模板/控制器等等)当在另一个域中使用ParentBundle
时(例如,当用户进入example.com时,使用覆盖模板/控制器等ParentBundle
)?
答案 0 :(得分:2)
你应该阅读我做的答案:Main page to sub applications on Symfony2
实际上,您必须在Web文件夹中创建2个控制器,例如: web / app.php,web / app_child.php
在app_child.php中,调用一个新的环境,这里称为“child”:
// ...
$kernel = new AppKernel('child', false);
// ...
创建一个特定于子包的config_child.yml,您可以在此处粘贴config.yml内容,甚至可以导入config.yml以防止重复代码:
// config_child.yml
imports:
- { resource: config.yml }
创建一个包含子包路由的新路由文件,例如,名为routing_child.yml,并在config_child.php中导入该文件:
framework:
router:
resource: "%kernel.root_dir%/config/routing_child.yml"
从经典的routing.yml文件中删除子包路由。
现在使用您的网站/ .htaccess根据子域名调用正确的环境:
<IfModule mod_rewrite.c>
RewriteEngine On
# Hit child app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^child\.example.com$ [NC]
RewriteRule ^(.*)$ app_child.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
就是这样,现在您的applciation将根据域加载正确的路由配置;)