openpearのライブラリNet_URL_Dispatcherを使用してみました。
phpのディスパッチャーが欲しいなと思い色々探していました。
下記のサイトを発見しましたので早速ダウンロードして使用しました。
http://d.hatena.ne.jp/heavenshell/20090103/1230985262
環境
OS:CentOS5.4
PHP:5.2.1
早速実行
<?php require_once 'Net/URL/Dispatcher.php'; $dispatcher = new Net_URL_Dispatcher(); $dispatcher->setDirectory('/var/www'); $dispatcher->connect(':controller/:action/*params')->dispatch();
上記のスクリプトを書いてhttp://URL/index.php/hoge/fugaにアクセスすると、
/var/www/controllers/HogeController.phpのFugaActionにディスパッチします。
そこで、上記URLのindex.phpいらないなぁーと思った時は下記で対応出来る事が確認出来ました。
<?php require_once 'Net/URL/Dispatcher.php'; $dispatcher = new Net_URL_Dispatcher(); $dispatcher->setDirectory('/var/www'); $dispatcher->setPathinfo($_SERVER['REQUEST_URI']); $dispatcher->connect(':controller/:action/*params')->dispatch();
&.htaccess(symfonyからインスパイア(笑))
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
上記のスクリプトを書いてhttp://URL/hoge/fugaにアクセスすると、
/var/www/controllers/HogeController.phpのFugaActionにディスパッチします。
まとめ
URLの正規化したいとか、今後他の言語のフレームワークで開発するかもしれないからとかにディスパッチャーは使えるのかな。クラスで色々書けるのは好きな人とかですかね。
追記
ライブラリの386行目にcontroller用のディレクトリー名(controllers)が固定で書かれているので、setter等があれば良いなと思いました。
[PR]Spreeの情報を集めています。
ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/