page_adsence

2010年8月27日金曜日

symfonyのフロントコントローラーとrouting.ymlにはまった

symfonyでフロントエンドと管理画面のアプリを作成しようと思った時にrouting.ymlに記述した変数が取得できなくて、
なんで取得できないのかさっぱりわからなくて、いろいろ検証してみた。



最初の状態はこんな感じ

web/index.php ← フロントエンド用のフロントコントローラー
web/manager.php ← 管理画面用のフロントコントローラー


まず、新しくプロジェクト作成してまっさらな状態できちんと取れるか試してみた。

routing.ymlはこんな感じ

testIndex:
url: /test
param: { module: test, action: index }

test:
url: /test/:value
param: { module: test, action: index }


この場合は特に問題なく取得することができた。



次にルーティングのURLの階層を増やしてみたが、これも問題なかった。



testIndex:
url: /dummyA/dummyB/test
param: { module: test, action: index }

test:
url: /dummyA/dummyB/test/:value
param: { module: test, action: index }


管理画面用のフロントコントローラーの場所を一階層下に変えてみた。



web/manager/index.php


それに伴い.htaccessを書き加えた。



RewriteRule ^manager(.*)$ manager/index.php [QSA,L]


こうするとvalueが取れなくなった。

mod_rewriteのせいなのかもしれない。

が、これをどう書き直せばrouting.ymlがちゃんと取ってくれるのかがわからない…。

そこで、フロントコントローラーのファイル名と場所を元に戻し、.htaccessを以下のように修正してみた。



RewriteRule ^manager(.*)$ manager.php [QSA,L]


こうすると取得できるようになった。

とりあえずこれでよしとする。