0

2つのバンドル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で使用するルーティングを指定し、Symfony2バンドル継承に従って親バンドルルートを失うapp/config/routing.ymlように名前を変更します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常にテンプレートが読み込まれます。

だから、私の問題は、別のドメインで使用している間(つまり、オーバーライドされたテンプレート/コントローラーなどを使用しているときに、あるドメインでオーバーライドするテンプレート/コントローラーChildBundleなどを使用する方法)です。 、ユーザーがexample.comにアクセスしたとき)?ChildBundleParentBundleParentBundle

4

1 に答える 1

2

あなたは私がしたこの答えを読むべきです:Symfony2のサブアプリケーションへのメインページ

実際、Webフォルダーに2つのコントローラーを作成する必要があります。例:web / app.php、web / app_child.php

app_child.php内で、ここでは「子」と呼ばれる新しい環境を呼び出します。

// ...    
$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ファイルから子バンドルルートを削除します。

次に、web / .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>

これで、アプリケーションはドメインに応じて適切なルーティング構成をロードします;)

于 2013-01-14T09:42:42.967 に答える