Posts Tagged ‘cakephp’

    はてなブックマーク - TransitionComponent for CakePHPで簡単確認画面実装
    このエントリーをはてなブックマークに追加

    最近はこればかり聴いている小山です。

    今回は、つい先ほど1.0がリリースされたTransition Componentを紹介します。
    (CakePHPのバージョンは1.3.2を想定しています。)

    Transition Component

    Webシステムで、実装が面倒なものとして例えば「確認画面」というものがあります。
    ようは「ページ遷移をともなって完結するような機能」ですね。
    他にも「ウィザード」や「アンケート回答」や「カート」でもいいかもしれません。

    Transition Componentは、そのような「ページ遷移」管理を一手に引き受けてくれるComponentで、hiromi2424さんによって開発がされています。

    Transition Componentは、セッションと、主にCakePHPのモデルバリデーションの機能を利用してページ遷移を管理しており、
    使いこなすとページ遷移管理を非常にすっきりとしたコードで実現することができます。

    今回は簡単な登録機能に確認画面を実装してみます。

    登録機能の実装

    今回はcaketransitionというデータベースにpostsというテーブルを作成します。

    postsの登録機能のMVCは以下のようなソースコードで作成します。

    post.php

    posts/add.ctp

    posts_controller.php

    Post.titleにnotemptyのバリデーションがある簡単な登録機能です。
    ただ、これだとまだ確認画面はありません。

    Transition Componentを利用した確認画面の実装

    ではTransition Componentを利用して実際に確認画面付きの登録機能を実装してみます。
    Modelは特に変更はないので、VとCだけ作成します。

    posts/add.ctp

    posts/add_confirm.ctp

    posts_controller.php

    たった、これだけですっきりした形で確認画面付き登録機能が実装できました。

    ポイント

    ページ遷移を伴う機能を実装するにあたって必要なのは以下の点です。
    また、Transition Componentでは以下のメソッドでそれらを担っています。

    • 正しい操作後の次のページへの遷移と入力データの保持 [TransitionComponent::checkData(), ::automate()]
    • 正しいページを通って来たかどうかのチェック [TransitionComponent::checkPrev()]
    • 各ページで入力されたデータの取得 [TransitionComponent::mergedData(), ::allData()]

    posts_controller.phpを見ても、とても直感的でわかりやすいかと思います。

    まとめ

    今回はTransition Componentの導入として簡単な確認画面付き登録機能を実装してみました。
    本当に簡単な導入部分だけを紹介しましたが、実際に使いこなすと非常に強力な機能を提供してくれます。
    個人的にはTransition Componentはここ最近のNo.1ヒットなCakePHPライブラリです。

    ぜひ使ってみることをお勧めします。

    詳細はREADMEhiromi2424さんのブログを確認してみてください。

    お知らせ

    7月3日(土)に第2回CakePHP勉強会@福岡を開催します。

    メインセッションも県外からのスピーカーセッションや、
    CakePHPベースCMS ”BaserCMS“の開発者の方のセッションなどがあり
    非常に充実していています。

    CakePHPで語りたい皆様、ぜひ参加してください。Transition Componentの使い方の質問なども是非。

    第2回CakePHP勉強会@福岡

    日時 / DATE :2010/07/03 14:00 to 18:00
    定員 / LIMIT :20 人
    会場 / PLACE :Fusic Co., Ltd. (福岡県福岡市中央区大名2-4-22 新日本ビル9F)

    申し込みはこちら→第2回CakePHP勉強会@福岡

      はてなブックマーク - Search Plugin for CakePHPで簡単検索機能実装
      このエントリーをはてなブックマークに追加

      最近CakePHPプラグインづいている小山です。

      今回はCakeDC謹製のSearch Pluginを紹介します。
      (CakePHPのバージョンは1.3.0を想定しています。)

      Search Plugin

      みなさんはCakePHPで検索機能を作るとき、どのように実装していますか?

      たとえば一般的な一覧画面(index)で検索機能を実装しようと思ったら、まずはformを作成して検索条件をPOSTで飛ばして利用すればいいですが、
      さらに最近デフォルトで実装されているページネーション機能と連携して、検索結果でページングを実現しようとするとちょっと面倒です。

      さらに細かい検索条件を実装しようと思ったら、もう考えたくありません。
      自分は新規案件のたびに毎回1からつくっていたような気がします。

      CakePHPのコアデベロッパーの75%を抱える(CakeDCのサイト情報)CakeDCでも、やはり面倒だと思っていたのか、Search Pluginという検索プラグインを作成して使っていたようです。

      最近いくつかのプラグインのソースが公開されたので自分も使ってみました。
      実際に触ってみると面白いくらいに簡単に検索機能が実装できます。

      CakePHPの初期設定

      どれくらい楽かがわかるように、CakePHPをダウンロードしてくるところから実施してみます。

      $ wget http://github.com/cakephp/cakephp1x/tarball/1.3.0
      $ tar zxvf cakephp-cakephp1x-1.3.0-0-g1c06478.tar.gz
      $ mv cakephp-cakephp1x-3bb7793/ cakesearch
      $ cd cakesearch

      次にデータベースを作成します。

      今回はcakesearchというデータベースにpostsというテーブルを作成します。

      次にCakePHPいつもの設定をします。

      appフォルダをそのまま使うつもりですが、app/config/*.phpをいじったりtmpフォルダのパーミッションの設定をするのが面倒なので、今回はbakeコマンドを利用してちょっと楽をします。

      $ php cake/console/cake.php bake

      bakeコマンドメニューの”[D]atabase Configuration”を使ってデータベースの設定をしたあと、”[P]roject”を使ってプロジェクトの設定をします。

      そこで、「What is the full path for this app including the app directory name?」と聞かれるので、ここであえてappフォルダのパスを指定します。

      [/var/www/cakesearch/app/myapp] > /var/www/cakesearch/app

      このあとは導かれるままにEnterを押していくと、app/config/core.phpのSecurity.saltやCakePHP1.3から新たに導入されたSecurity.cipherSeedの設定をしてくれます。app/tmpのパーミッション設定までしてくれています。

      つぎにbakeコマンドを使ってpostsテーブルのMVCのファイルを作成します。

      このとき、「Would you like to create some basic class methods」と聞かれたときにyを選択してindexアクションを作成しておいてください。

      Search Pluginの設定

      さて、ここまででCakePHP自体の設定は終わりです。

      ここからSearch Pluginを導入してみます。

      CakeDCのgithubリポジトリからSearchプラグインをダウンロードして設置します。

      $ cd app/plugins
      $ wget http://github.com/CakeDC/Search/tarball/master
      $ tar zxvf CakeDC-Search-xxxxxx.tar.gz
      $ mv CakeDC-Search-xxxxxx search

      これでSearch Pluginの設置は完了です。
      次にpostsの一覧画面(posts/index)にtitleで検索する機能を実装してみます。

      bakeコマンドで作成されたapp/models/post.phpを以下のように書き換えます。

      $filterArgsは大体想像できると思うのですが、「titleフィールドをLIKEで検索する」ための設定です。typeには他にも完全一致や、サブクエリなどをつかった条件指定などもできます。

      次にapp/controllers/posts_controller.phpを書き換えます。
      (簡単のためindexアクションまでを表示しています)

      $presetVarsは、検索フォーム内のデータを管理するための設定値です。

      $this->Prg->commonProcess()は検索条件のデータのハンドリングを行っています。例えば検索条件自体のバリデーションなどもすることが可能です。

      $this->Post->parseCriteria()は$this->passedArgsと$this->Post->filterArgsを利用して$this->paginateに渡す条件を作成します。

      次にapp/views/posts/index.ctpを書き換えます。
      (簡単のため書き加えた部分周辺のみを表示しています)

      これでbakeコマンドで生成したファイルの修正はすべて終了です。

      なんとこれだけです。
      たったこれだけの修正で、ページネーションと連携したり、検索した条件が保持されたりする検索機能を実装できました。

      まとめ

      今回は、CakeDC謹製 Search Pluginの簡単な導入方法を紹介しました。

      もう少し込み入った使い方などはREADMEなどに詳細に書かれていますので、是非参考にしてみてください。