本番環境とテスト環境でのURLの差異を吸収する
cakePHPでは開発環境はDocumentRootの下に一式展開するのだが、本番環境をセットアップするときには余計なファイルを見られないようにapp/webrootをWebサーバのDocumentRootに設定せよ。と CakePHP プログラマーズ リファレンスガイドに書かれている。これを素直に実行すると開発環境と本番環境ではURLが異なってしまう。まさか、本番環境へリリースするときにわざわざ書き換えるなんてことはしたくない。でも、それを何とかしないと開発が行い難い。特に困ったのがCSS。app/views/layout/default.thtml に読ませるCSSを指定したときに、相対パスだと読める(たどり着ける)ページとたどりつけないページが出てきて、不統一っぷりが格好悪い。
そんな問題を解決してくれるのがHTMLヘルパー。よく使うのはHtmlHelper::link。内部へのリンクはこれを使い、”/コントローラ名/〜”と書くことで出力されるHTMLをヨロシクやってくれるので、作り手が環境を気にする必要がない。上のCSSの例だとdefault.htmlに
とするとapp/webroot/css/common.css を読み込むようにhref属性を作ってくれる。
これを知らなかったとには、試しに本番環境へアップロードしたらNotFoundになるのでワザワザソースを書き換えていた。そのときは、「こんなんじゃ使いモノにならないじゃん」とも思った。他の人も悩んでいると思い、ぐぐってみるとhttp://li-pton.com/wordpress/php/cakephp_virtual_host.htmlにバーチャルホストで解決させるという案があった。最初に見たときは「成る程!!」とも思ったが、これは、これで面倒だとも思った。
HTMLヘルパーで解決するのが(思想的にも)スマートと思う。URLを書くたびにHTMLヘルパーを使ったコーディングになってしまうのは、それはそれで、如何なものかとも思うが、現実的な方法かな。
トラックバック URI : http://www.akky.org/archives/38/trackback/
コメント (0)