[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#5 ルーティング拡張でプラグイン独自のURL
前回まででほとんどの機能は完成しています。今回は利便性の向上を目的として、ルーティングの拡張を行います。前回までの内容ですと、フリーページにアクセスする際は/freepage/id/1といったURLでした。どうせなら、/id/というのを削りたいですね。しかしながら、プラグインとして追加する以上、サイト管理者にrouting.ymlを書き換えてもらうなどという対応はよろしくありません。OpenPNE3のベースとなるsymfonyではプラグインからルーティングを拡張するための仕組みが用意されています。symfony 1.1 日本語 マニュアル 第17章 - symfonyを拡張する - プラグインの機能にもその記述があります。OpenPNE3.0系ではこの機能にのっとってルーティング拡張をしているようです。
早速試してみましょう。/plugins/opFreepagePlugin/config/config.phpを新規作成し、以下の内容を追加します。
-
<?php
-
$this->dispatcher->connect('routing.load_configuration', array('opFreepagePluginRouting', 'listenToRoutingLoadConfigurationEvent'));
-
?>
そして、/plugins/opFreepagePlugin/lib/opFreepagePluginRouting.class.phpを新規作成し、以下の内容を記述します。
-
<?php
-
class opFreepagePluginRouting
-
{
-
static public function listenToRoutingLoadConfigurationEvent(sfEvent $event)
-
{
-
$routing = $event->getSubject();
-
-
'freepage_id' => new sfPropelRoute(
-
'/freepage/:id',
-
),
-
);
-
-
foreach ($routes as $name => $route)
-
{
-
$routing->prependRoute($name, $route);
-
}
-
}
-
}
さきほどご紹介したマニュアルのページとは少しソースコードの形式が違っていますね。これはopDiaryPluginのルーティング拡張部分を参考にしたコードです。特徴としては、配列によって簡単にルーティング設定を追加することができるようになっています。
これだけでURLが変わります。
-
./symfony cc
でキャッシュをクリアして、新しいルーティングを適応させます。
試しに/freepage/1、/mobile_frontend.php/freepage/1とURLを打ってみてください。ちゃんとアクセスできると思います。
次回は最終回です。OpenPNE3のプラグインのパッケージング方法をご紹介したいと思います。