Symfony2でサブドメインに対応したサイトを作る

Symfony2では特定のBundleをサブドメインに切り出すことができる。正しくはBundle毎に任意のドメインを割り当てることができる。もちろん開発用のビルトインサーバでも使うことが可能。

将来的にサブドメインを使う想定があるならば、事前にBundleは分割しておくと良い。

Example

AcmeWebBundleは www.example.com へ、AcmeSmartphoneBundleは sp.example.com に割り当てるようにする。

まずapp/config/parameters.yml にドメインを書いておく。パラメータ名は自由に決められるが、今回は下記のようにした。

parameters:
    acme.www.host: www.example.com
    acme.smartphone.host: sp.example.com

app/config/routing.ymlでルーティングを下記のように設定する。通常のルーティングの設定にhost項目を増やすだけなので簡単ですね。どちらもprefixは / にしておくこと。

acme_web:
    resource: "@AcmeWebBundle/Controller"
    type: annotation
    prefix: /
    host: "%acme.www.host%"

acme_smartphone:
    resource: "@AcmeSmartphoneBundle/Controller"
    type: annotation
    prefix: /
    host: "%acme.smartphone.host%"

これでAcmeWebBundleとAcmeSmartphoneBundle内のコントローラには指定したドメイン以外ではアクセス出来なくなる。また Twig の path 関数もよしなにやってくれる。ローカルで動作確認をしたい場合は/etc/hostsやDNSを書き換えて127.0.0.1に向けよう。

ただしローカル開発環境ではサブドメインではなくhttp://localhost:8000/sp/ でアクセス出来るようにしておくと開発しやすいケースもあると思うので、その場合は routing_dev.yml を次のようにする。

_main:
    resource: routing.yml

acme_web:
    resource: "@AcmeWebBundle/Controller"
    type: annotation
    prefix: /

acme_smartphone:
    resource: "@AcmeSmartphoneBundle/Controller"
    type: annotation
    prefix: /sp