モデルにフォームの内容を保存する
モデルにフォームの内容を保存するにはいくつか方法があります.
- プロパティに直接入れる
-
Model#assign()
を使う -
Model::cloneResult()
を使う -
Model::cloneResultMap()
を使う -
Form#isValid()
を使う -
Model#save()
を使う
それぞれ使用例を次に示します.下記では配列で名前と値を明示的に渡していますが name が正しく設定されたフォームからのリクエストならば $this->request->getPost()
を直接渡すこともできると思います. dev-tools でモデルを生成した場合は setter が作られる場合もあり,これは自身を返しているのでメソッドチェーンのように連続でセットすることもできると思いますがここでは紹介しません.
使用例
プロパティに直接入れる
モデルに直接値を入れます.
$post = new Post();
$post->message = $this->request->getPost('message');
$post->save();
Model#assign()
を使う
モデルに値を入れます.同時に複数の値をセットできると思います.また返り値はそのモデル自身なのでそのまま save()
なども呼べると思います.
$post = new Post();
$post->assign(array(
'message' => $this->request->getPost('message'),
));
$post->save();
Model::cloneResult()
を使う
この場合は 第一引き数に与えられたインスタンスの値を持ちつつ値をセットすることが出来ます.
また,このメソッドでセットされた場合は中で afterfetch()
が実行されます.
$post = Model::cloneResult(new Post(), array(
'message' => $this->request->getPost('message'),
));
$post->save();
Model::cloneResultMap()
を使う
単にフォームの name とモデルのプロパティ名が異なる場合はこれでやるとうれしいんじゃないでしょうか.
このメソッドでも, cloneResult()
と同様に中で afterfetch()
が実行されます.
注意)2014/05/30 時点では ドキュメント は cloneResult()
と同じような使い方が書かれていますが誤りで BadMethodCallException
が投げられます.
$post = Phalcon\Mvc\Model::cloneResultMap(new Post(), array(
'message' => $this->request->getPost('message'),
), array('message' => 'message'));
$post->save();
Form#isValid()
を使う
Form 内に csrf トークンなどが設定する場合は必要なチェックも行えてモデルにデータを突っ込めるのでよいかもしれないです.ただどうしても Form のバリデーションと Model のバリデーションが重複する場合があるのでどっちでどうバリデーションするかは場合によるんじゃないでしょうか.
$post = new Post();
$form = new Phalcon\Forms\Form();
$form->add(new Phalcon\Forms\Element\TextArea('message'));
if ($form->isValid(array('message' => $this->request->getPost('message')), $post)) {
$post->save();
}
Model#save()
を使う
save()
にも値を直接渡して保存できる.
$post = new Post();
$post->save(array('message' => $this->request->getPost('mesasge'));
参考文献
Model クラスドキュメント
Abstract class Phalcon\Mvc\Model — Phalcon 1.3.1 documentation
http://docs.phalconphp.com/ja/latest/api/Phalcon_Mvc_Model.html
Form クラスドキュメント
Class Phalcon\Forms\Form — Phalcon 1.3.0 documentation
http://docs.phalconphp.com/en/latest/api/Phalcon_Forms_Form.html
Model#save()
について
Phalcon Model::save メソッドのオプション引数の正体 - Qiita