rhaco1-doc :: 100-blog-tutorial/04-crud-and-validation.txt
http://wikihub.org/wiki/rhaco1-doc/100-blog-tutorial/04-crud-and-validation
Table of contents:
- rhaco
- モデル
- テンプレート
- ビュー
- プロジェクト
- セットアップ
- ユーティリティ
- データベース
- テスト
- arbo
- Tips
- ブログチュートリアル
- README
Updates:
CRUDとデータバリデーション
データベースを読み,記事の一覧を表示できるようになりました.
今度は,新しい記事の追加,記事の削除,記事の編集と一般的なアプリケーション開発では必須となる処理を実装してみましょう.
記事の追加
今回も汎用 Views を用いますので,Viewは作成しません.
index.php に記述しているルーティング設定にに以下の記述を追加してください.
: $pattern = array( //投稿記事の一覧を表示 "^posts(?:/index)?/?$"=>array("class"=>"generic.Views","method"=>"read","args"=>array(new Post())), //新しい記事の投稿 "^posts/add/?"=>array("class"=>"generic.Views","method"=>"create","args"=>array(new Post(),array(Rhaco::url("posts")))), ); :
記事の追加処理についても,一覧表示と同様に汎用Viewsを用いることでルーティング設定を記述することで簡単に実装ができました.
また,argsの配列の2個目には,データ作成が成功した際のリダイレクト先URLを指定することができます.
さらに,日本では確認画面付きのデータ作成フローを望まれることが多々あります.rhaco では確認画面付きの作成フローは,method を confirmedCreate と指定するだけで OK です.
データのバリデーション
rhaco はフォームの入力バリデーションの退屈さを取り除くのに大いに役立ちます.みんな,延々と続くフォームとそのバリデーションルーチンのコーディングを好きではないでしょう.
rhaco を使うと,その作業を簡単,高速に片付けることができます.
バリデーションの機能を活用するためには,project.xml の列モデルに属性を追加します.
既にデータベース設計段階で記述していますので,もう既に最低限のバリデーション機能は実装済みです.
記事の削除
次に,ユーザが投稿記事を削除できるようにする機能を作りましょう.
今回も汎用Viewsを用いますので,ルーティング設定を追加するだけです.
もう,面倒なので,記事の編集と詳細も同時に作ります.
: $pattern = array( //投稿記事の一覧を表示 "^posts(?:/index)?/?$"=>array("class"=>"generic.Views","method"=>"read","args"=>array(new Post())), //新しい記事の投稿 "^posts/add"=>array("class"=>"generic.Views","method"=>"create","args"=>array(new Post(),array(Rhaco::url("posts")))), //記事の詳細 "^posts/view/(\d+)$"=>array("class"=>"generic.Views","method"=>"detail","args"=>array(new Post())), //記事の削除 "^posts/delete/(\d+)$"=>array("class"=>"generic.Views","method"=>"drop","args"=>array(new Post(),array(Rhaco::url("posts")))), //記事の編集 "^posts/update/(\d+)$"=>array("class"=>"generic.Views","method"=>"update","args"=>array(new Post(),array(Rhaco::url("posts")))), ); :
ここで,共通しているのは,正規表現で数値をキャプチャしていることです.
はい,ご察しの通りここが削除・編集したい記事の id になります.
このように,id のキャプチャを指定することにより,どのようなURL設計でも同じ処理の実装が可能です.
では,それぞれの URL にアクセスして動作していることを確認してください.


