[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#5 ルーティング拡張でプラグイン独自のURL

カテゴリ: OpenPNE3,php,symfony / author: uechoco / 2009年03月01日 10:10:25
この記事を読む時間:124くらい

前回まででほとんどの機能は完成しています。今回は利便性の向上を目的として、ルーティングの拡張を行います。前回までの内容ですと、フリーページにアクセスする際は/freepage/id/1といったURLでした。どうせなら、/id/というのを削りたいですね。しかしながら、プラグインとして追加する以上、サイト管理者にrouting.ymlを書き換えてもらうなどという対応はよろしくありません。OpenPNE3のベースとなるsymfonyではプラグインからルーティングを拡張するための仕組みが用意されていますsymfony 1.1 日本語 マニュアル 第17章 - symfonyを拡張する - プラグインの機能にもその記述があります。OpenPNE3.0系ではこの機能にのっとってルーティング拡張をしているようです。

早速試してみましょう。/plugins/opFreepagePlugin/config/config.phpを新規作成し、以下の内容を追加します。

php:
  1. <?php
  2. $this->dispatcher->connect('routing.load_configuration', array('opFreepagePluginRouting', 'listenToRoutingLoadConfigurationEvent'));
  3. ?>

そして、/plugins/opFreepagePlugin/lib/opFreepagePluginRouting.class.phpを新規作成し、以下の内容を記述します。

php:
  1. <?php
  2. class opFreepagePluginRouting
  3. {
  4.   static public function listenToRoutingLoadConfigurationEvent(sfEvent $event)
  5.   {
  6.     $routing = $event->getSubject();
  7.  
  8.     $routes = array(
  9.       'freepage_id' => new sfPropelRoute(
  10.         '/freepage/:id',
  11.         array('module' => 'freepage', 'action' => 'index'),
  12.         array('id' => '\d+'),
  13.         array('model' => 'Freepage', 'type' => 'object')
  14.       ),
  15.     );
  16.  
  17.     $routes = array_reverse($routes);
  18.     foreach ($routes as $name => $route)
  19.     {
  20.       $routing->prependRoute($name, $route);
  21.     }
  22.   }
  23. }

さきほどご紹介したマニュアルのページとは少しソースコードの形式が違っていますね。これはopDiaryPluginのルーティング拡張部分を参考にしたコードです。特徴としては、配列によって簡単にルーティング設定を追加することができるようになっています。

これだけでURLが変わります。

BASH:
  1. ./symfony cc

でキャッシュをクリアして、新しいルーティングを適応させます。

試しに/freepage/1、/mobile_frontend.php/freepage/1とURLを打ってみてください。ちゃんとアクセスできると思います。

次回は最終回です。OpenPNE3のプラグインのパッケージング方法をご紹介したいと思います。


コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.