powered by nequal

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:

collapse all expand all

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 にアクセスして動作していることを確認してください.

参考