あなたのアプリケーションが本当に違う場合、ここで私はどのようにしますか:
構造:
// src/:
Sybio\Bundle\CoreBundle // Shared entities, config and tools
Sybio\Bundle\PortalBundle // Your main portal, domain.com
Sybio\Bundle\Ps3Bundle // Ps3 bundle
Sybio\Bundle\XboxBundle // Xbox bundle
// etc ...
おそらくより良い方法は、「コンソール」リポジトリ内にすべてのコンソール バンドルを追加することです。
Sybio\Bundle\CoreBundle // Shared entities, config and tools
Sybio\Bundle\PortalBundle // Your main portal, domain.com
Sybio\Bundle\Console\Ps3Bundle // Ps3 bundle
Sybio\Bundle\Console\XboxBundle // Xbox bundle
// etc ...
CoreBundle は、他のバンドル間でエンティティを共有するために使用されますが、それだけではありません: すべてのバンドルに含まれるテンプレートの特定の部分を含むバンドルになります。
その後、コンソールごとに 1 つの Web コントローラーを作成します。
web/app.php // Your main site
web/app_ps3.php // Ps3 app
web/app_xbox.php // Xbox app
// etc...
app_ps3.php 内を参照して、AppKernel コンストラクターの最初のパラメーターをコンソールの名前に置き換えます。
// ...
$kernel = new AppKernel('ps3', false);
// ...
app_dev.php のように、必要に応じて開発バージョンで各コントローラーを複製できます...
これで、フレームワークは使用する Web コントローラーに応じて異なる環境をロードします。
たとえば、ドメイン「ps3.domain.com」は web/app_ps3.php を使用します (その方法は最後に説明します)。
フレームワークは、app/AppKernel.php でアプリの構成を読み込みます。
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}
訪問者が web/app_ps3.php にアクセスすると、フレームワークは従来の config_dev.php または config_prod.php の代わりに config_ps3.yml をロードします。バンドルの依存関係で遊んでみましょう!
コンソールごとに「app/config_myconsole.php」と「app/routing_myconsole.yml」を作成します。
config_ps3.yml (およびその他のコンソール) で、一般的な構成を読み込みます。
// config_ps3.yml
imports:
- { resource: config.yml }
この行の後、ps3 ルーティング ファイルのルーティング インクルードをオーバーライドします。
// config_ps3.yml
// ...
framework:
router:
resource: "%kernel.root_dir%/config/routing_ps3.yml"
再開するには、ユーザーが web/app_ps3.yml をクリックすると、ファイル config_ps3.yml が読み込まれ、次に一般的な config.yml ファイル、次に routing_ps3.yml (routing.yml を置き換えます) が読み込まれます。
必要なバンドルの構成をインポートすることもできます。構成ファイルごとに、バンドルが多数ある場合に負荷を軽減できます。
// config_ps3.yml
imports:
- { resource: config.yml }
- { resource: "@SybioCoreBundle/Resources/config/services.yml" }
- { resource: @SybioPs3Bundle/Resources/config/services.yml }
使用される各コンソール アプリケーションは独自のルートであり、いくつかの共有ルートと CoreBundle に配置されたアクションもあります。
アプリケーションごとに、そのコンソール ルートとコアバンドル ルートをロードする必要があります。ここでは、routing_ps3.yml の例を示します。
// routing_ps3.yml:
SybioCoreBundle:
resource: "@SybioCoreBundle/Controller/"
type: annotation
prefix: /
SybioPs3Bundle:
resource: "@SybioPs3Bundle/Controller/"
type: annotation
prefix: /
ユーザーが web/app_ps3.yml にヒットすると、Ps3Bundle と CoreBundle からのルートが読み込まれます... ユーザーがhttp://ps3.domain.com/にいる場合、il は Ps3Bundle からのルート "/" にヒットし、 "/" を別のコンソールまたはポータル バンドルからルーティングします。ロードしないためです。
すべてのアプリケーション間で共有される「/stats/」などの一般的なページがある場合は、CoreBundle でこのルートを作成するだけで、各バンドルでコードを複製する必要がなくなります。CoreBundle ルートを Ps3Bundle に含めたので、フレームワークは両方のバンドルでルートを検索します。
このルートには、ps3.domain.com/stats/、xbox.domain.com/stats/... からアクセスできます。
最後に、サブドメインに応じて適切な Web コントローラーを使用する必要があります。処理方法は次のとおりです。
// web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
# Hit ps3 app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^ps3\.domain.com$ [NC]
RewriteRule ^(.*)$ app_ps3.php [QSA,L]
# Hit xbox app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^xbox\.domain.com$ [NC]
RewriteRule ^(.*)$ app_xbox.php [QSA,L]
# Hit your main portal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www\.domain.com$ [NC]
RewriteRule ^(.*)$ app.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
仮想ホストにはあまり慣れていませんが、通常は機能します。
これで、同じコア上に構築されたさまざまなアプリケーションをロードするために、さまざまな構成を操作する方法がわかりました。
乾杯。