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/