选择父/子包依赖于Symfony2中的域

时间:2013-01-14 09:00:07

标签: symfony symfony-2.2

假设我有两个捆绑ParentBundleChildBundleChildBundle通过

“延伸”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)?

1 个答案:

答案 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将根据域加载正确的路由配置;)