Net_URL_MapperをつかったUrlhandlerプラグイン
| 書いた人 | いちい | 2007-07-23 | 初版 |
まだ書いてる途中です。パッケージ近日公開予定
Ethna_Plugin_Urlhandler_NetURLMapper プラグインは、 PEAR パッケージの 1 つである Net_URL_Mapper を使って、もともとの Ethna_UrlHanlder よりも簡単にアプリケーションの URL を扱うことができます。
概要
Ethna_UrlHandler は、たとえば http://example.jp/index.php/echo/hoge という URL から echo アクションに msg="hoge" をパラメタとして実行するといった機能を提供します。とても複雑なルールが記述できる一方で、簡単なルールでも複雑となってしまい、ちょっと使いづらい場面もありました。
Net_URL_Mapper は、フレームワークとは独立した単体のライブラリとして、より簡単な記述で同様な機能を実現することができます。
Net_URL_Mapper パッケージの description からの引用:
The URL syntax is similar to what can be found in Ruby on Rails or Python Routes module and as such, this package can be compared to what they call a router. Still, Net_URL_Mapper does not perform the dispatching like these frameworks and therefore can be used with your own router.
Urlhandler_NetURLMapper プラグインは、 Net_URL_Mapper オブジェクトに Ethna のコントローラやアクションフォームから直接呼び出される UrlHandler のインタフェースを提供します。
インストール
Net_URL_Mapper は php5 以降が必要です。
↓以下はまだできません
% ethna install-plugin --alldeps urlhandler neturlmaper
利用例
アプリケーションの UrlHandler クラス (App_UrlHandler) の getInstance() をオーバーライドして Urlhandler_NetURLMapper プラグインのインスタンスを返すようにします。
function &getInstance($class_name = null)
{
$instance = parent::getInstance('NetURLMapper');
if ($instance->getMapper() === null) {
$mapper = Net_URL_Mapper::getInstance();
$mapper->connect(
'/echo/*msg',
array('action_echo_msg' => true)
);
$mapper->connect(
'/printf/:format/*param',
array('action_printf' => true)
);
$instance->setMapper($mapper);
$instance->setPathPrefix('index.php');
}
return $instance;
}
Net_URL_Mapper の設定は、プラグインに setMapper() でインスタンスを渡す前にする必要があります。*1
- $mapper->connect()
- Net_URL_Mapper のメソッドで、 URL のマッピングの設定を記述します。
- $instance->setMapper()
- Urlhandler_NetURLMapper プラグインに Net_URL_Mapper のインスタンスを渡します。
- $instance->setPathPrefix()
- Net_URL_Mapper 自身も PATH_INFO の prefix 部分を扱う仕組み (/ja, /en など) がありますが、 Ethna では Smarty の {url} プラグインなどの都合で UrlHandler 自体がそれを知っている必要があるため、このような指定方法になってます。
TODO
- B.C. わすれてきれいにしたいです。
- Net_URL_Mapper のインタフェースなのか、 Net_URL_Mapper 自体を取り込んだ感じの「設定が簡単にできます」的なプラグインなのか、ちょっと悩みどころ*2。
Ethna-2.6.0(beta2)