CodeIgniter覚え書き
2008-08-13 22:10 /
・・・えーと、二つネタがあったのです。一つは、コンストラクタでビューを呼び出してはいけませんという話と(なぜなら 404 エラーになるから)、フレームワーク関連の書籍は、やっぱりプログラマしか相手にしていないように見えるという話です。
例えばリライトされた後に、ビューの中でスタイルシートのファイルへ正しくパスを通すにはどうすればいいかといった、デザイナーならふつうに気にするような論点が、フレームワークの本には殆ど出てこない。代わりに、index.php を消すにはどうすればよいかといった、中途半端な Apache の解説が出てくるだけです。それから、フレームワークが DocumentRoot 直下で動くことを想定して書くのは、システム開発の視点としてはいささか狭いと言っていい。サーバを用意するところから始まる案件ばっかりではありませんよ。特に代理店さん経由の案件は、リニューアルといいお客さんのサーバに実装する案件と言い、ROOT/hoge/foo/bar/new/public/index.php といった階層に実装することもざらです。
で、書いていて日本の出版社とか、CodeIgniter 関連とか、いろんな方面に自分でもかなり辛辣と思えることをガァーーーーーっと書いていたので、やめました。もちろん、正当な根拠はあると思っているので、暴言ではないと思いますが、本当の DIS みたいになるのでやめ。上記の内容だけで察して下さい。
[追記]
マニュアルとか見てると、/class/method/value といったセグメントの説明は出てくるんだけど、例えば、
/index.php/myclass
でアクセスすると、自動的に /index.php/myclass/index にアクセスしていることになり、従って index() というメソッドがないと、/index.php/myclass.ext のようなアクセスは全て 404 エラーになるという基本的なことが説明されていないように感じました。確かにログを見ていれば分かることですが、ブラウザに表示されるエラーに頼る人も多いと思うので、このあたりは中途半端にエラーを画面に出している落とし穴のように感じます。あと、Apache のエラーログも見た方がいい場合もあります。(mod_rewrite 関連のエラーは、CodeIgniter のログには出ません)
[追記・2008-12-05]
コメントでご指摘いただいたように、_remap() を使うと index() 以外のメソッドを優先して呼び出してくれるようです。なるほど、これを使うとセグメントに何が指定されていても特定のメソッドが呼び出されるということになります。ただし、再定義されたメソッドが呼び出されると、本来のセグメントで指定されたメソッドの扱いはどうなるのかとか、_remap() すると、例えばふつうにセグメントベースのアプローチでアクセスする場合と違ってどういう利点があるのか(例えば・・・セマンティック攻撃に強くなるとか?)といったあたりは、改めて調べておきたいと思います。
・・・。 said…
_remapで再定義があれば
そんな事ないと思います。
Takayuki KAWAMOTO said…
こんばんは。コメントありがとうございます。
なるほど。
http://codeigniter.jp/user_guide_ja/general/controllers.html
ですね。確かに、URI に指定されたセグメントがなんであっても _remap() を使えば優先されるという説明があります。
最初、おもむろにインストールして使っていた感想としては、CodeIgniter が index() をデフォルトのメソッドとして呼び出しているのか、それとも Apache が /myclass にアクセスすると /myclass/index.php を呼び出すがゆえにそうなるのか、分からなかったのでした。
