add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

symfony1.4(1.3)で簡単に確認画面を作るアドミンジェネレータ

exDoctrineThemePlusPlugin

すでに議論され尽くしている感がある「確認画面を作る方法」ですが、symfony1.3以降で簡単に確認画面を作成できるテーマを作成しましたので紹介します。

既に参考になるsymfonyでの確認画面の作成方法についての記事

今回紹介するプラグインを使わなくても色々な方法でsymfonyに確認画面を追加する方法については記事があります。
気をつけなくてはならないのは使用するsymfonyのバージョンによって全く動かないことがあると思いますのでバージョンの確認が必要です。

exDoctrineThemePlusPluginとは?

これはsfPropelAdminGeneratorPlusPluginとほぼ同じ機能で、このプラグインを利用すれば、タスクを実行するだけでアドミンジェネレータで確認画面付きのモジュールが作成できます。
また、作成したモジュールはgenerator.ymlでちょこっとは制御することが可能です。
入力画面に戻るためにセッションを利用していたりするのでセッションが使えることが前提になります。

プラグインをインストールする

GitHubからプラグインのソース一式をとってきます。gitが入っている環境であれば以下の手順でダウンロードできます。

$cd YOURSYMFONYPRJECTO_ROOT/plugins/
$git clone git://github.com/brtriver/exDoctrineThemePlusPlugin.git ./exDoctrineThemePlusPlugin

もし、gitの環境がない場合は GitHubのページの右上にある「Download Source」をクリックしてソースをZIPなどでダウンロードしてください。

プロジェクトでプラグインが利用できるようにする

プロジェクトのconfig/ProjectConfiguration.class.phpファイルでこのプラグンが利用できるようにenablePluginsに追加します。

PHP:
  1. class ProjectConfiguration extends sfProjectConfiguration
  2.     {
  3.       public function setup()
  4.       {
  5.         $this->enablePlugins('sfDoctrinePlugin', 'exDoctrineThemePlusPlugin');
  6.       }
  7.     }

プラグインのスタイルシートを適用する

このプラグインにはアドミンジェネレータで利用するスタイルシートを含んでいます。
このスタイルシートを利用するので以下のコマンドを叩いておきます。

$./symfony plugin:publish-assets

これで公開ディレクトリ以下にプラグイン名のディレクトリが作成されプラグインのスタイルシートが参照できるようになります。

キャッシュをクリアする

最後にキャッシュをクリアしておきます。

$./symfony cache:clear

これで、準備は整いました。
symfonyのタスクとしてdoctrine:generate-admin-plusが表示されれば成功です。

$./symfony list doctrine
....
:generate-admin-plus Generates a Doctrine admin module with the process to confirm input values
...

アドミンジェネレータで追加画面付きのモジュールを作成する

基本はgenerate-adminタスクと同じです。何も考えずにコマンドを叩けばOKです。

$./symfony doctrine:generate-admin-plus admin application routeormodel

routing.yml

このアドミンジェネレーターはオブジェクトルーティングを利用して確認画面の遷移を実装しています。そのため、routing.ymlには以下のような記述が追加されます。

CODE:
  1. article:
  2.      class: sfDoctrineRouteCollectionPlus
  3.      options:
  4.        model:                Article
  5.        with_wildcard_routes: true
  6.        with_separated_confirm: true

classでsfDoctrineRouteCollectionPlusが指定されていることと、widh_separated_confirmという新しいオプションが存在していることが通常のルーティングと異なります。
このオプションでなんとなく気づかれると思いますが、確認画面のOn, Offはwith_separated_confirmをtrueにするかfalseにするかで切り替えることができます。
そして、generator.ymlでテーマをadmin-plusに設定すれば確認画面のための設定が完了します。

generator.yml

generator.ymlは以下のようになります。

CODE:
  1. generator:
  2.   class: sfDoctrineGenerator
  3.   param:
  4.     model_class:           Article
  5.     theme:                 admin-plus
  6.     non_verbose_templates: true
  7.     with_show:             false
  8.     singular:              ~
  9.     plural:                ~
  10.     route_prefix:          article
  11.     with_doctrine_route:   true
  12.     actions_base_class:    sfActions
  13.  
  14.     config:
  15.       actions: ~
  16.       fields:  ~
  17.       list:    ~
  18.       filter:  ~
  19.       form:    ~
  20.       edit:    ~
  21.       new:     ~
  22.       confirm: ~

themeとしてadmin-plusが指定されています。このテーマを利用しないと確認画面処理が行われません。
また、configとして確認画面用のconfirmが用意されていますが、それほど融通が効くことができません。
displayを変更したりするぐらいです。

もし、すでにアドミンジェネレーターで作成したモジュールに対してこのタスクを実行してもルーティングやgenerator.ymlは書き換えられないかもしれません。
その場合は、手動で上記2項目に変更を行う必要があります。

使用方法のまとめと注意点

切り替え方法

  • さきほども説明しましたが、Objectルーティングによって確認画面への画面遷移を実装しているので、確認画面を利用しない場合は以下の設定変更を行います。
    • routing.ymlのwith_separated_confirmをfalseにする
    • generator.ymlのthemeをadminにする

セッションが利用できることが前提

  • 確認画面から入力画面に戻るのにセッションを利用しています。そのため、セッションが利用できることが前提になります。

簡単なフォームでのみ利用可能

  • 画像のアップロードなどは対応していません。フォームの入れ子のものも対応していません。シンプルなフォームのみ対応しています。

おまけ

実はdefault-plusというテーマも含んであり、このテーマを利用すれば管理画面付きモジュールのひな形作成ができます。
アドミンジェネレータとは実装も異なっていたりしますが、CakePHPのBakeのようにがっつりと確認画面付きのモジュールのひな形が欲しい場合は役にたつかもしれません。

使い方も簡単でdoctrine:generate-moduleで--theme="default-plus"を指定するだけです。

$./symfony doctrine:generate-module --theme="default-plus" frontend article Article

既存のモジュールがあればファイルを上書きしてしまいますので注意してください。

もっと楽をできるために!

この記事では具体的な実装方法にはあまり深く触れないようにしました。知らなくても簡単な確認画面であればコマンドを叩くだけで作成できるのがsymfonyの良いところでもあります。
またこのように(大変ですが)拡張すればこんなこともできるよ!というところが伝われば幸いです。

関連するその他の記事

Comments

Leave a Reply