はじめに
はい、4日めです。引き続き @localdisk です。よろしくお願いします。
本日は Model で Validation を行うパッケージ Ardent のご紹介。
Validation のおさらい
その前に Laravel の Validation についておさらいしておきましょう。
Laravel の Validation は大体こんな感じ。ほとんどの場合で Controller か、routes.php に書くことになると思います。
// ルール
$rules = [
'username' => 'required|alpha_dash|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|between:4,11|confirmed',
'password_confirmation' => 'between:4,11',
];
$validator = Validator::make($rules);
// Validation 作成
$validator = Validator::make($inputs, $rules);
if ($validator->fails()) {
// Validation 失敗
return Redirect::back()->withInput()->withErrors($validator);
}
if ($validator->passes()) {
// ちなみにこれが成功
}
わかりやすい! fails
と passes
というひと目見てわかるメソッド名が素晴らしいですね。こういうところが Laravel のよいところです。
Ardent の導入
まずは composer.json
の require
セクションに下記を追加
{
"require": {
"laravelbook/ardent": "dev-master"
}
}
そして composer update
で OK. 他のパッケージだと必要な ServiceProvider
や Facade
の登録は必要ありません。
基本的な使い方
まず、対象の Model を用意します。User という Model にしましょう。普通に作ると
class User extends Eloquent {}
こうなりますね。Ardent は
use LaravelBook\Ardent\Ardent;
class User extends Ardent {}
となります。継承するクラスを Eloquent から Ardent に変更します。そして Validation の定義はこう。
class User extends Ardent {
public static $rules = [
'username' => 'required|alpha_dash|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|between:4,11|confirmed',
'password_confirmation' => 'between:4,11',
];
}
はい、このように $rules フィールドに Validation ルールを記述するだけです。簡単ですね。このように記述すると Model の登録/更新時に Validation が適用されます。
一時的に、違うルール、メッセージを適用する
「基本的にはこれでいいんだけど、XX の場合だけ Validation 変更できない?」というケースも安心です。
save メソッドを呼び出すときに引数で渡すこともできます。
$rules = [
'password' => 'required|between:4,11|confirmed',
];
$message = [
'required' => 'パスワードを入れないとかどうかと思うよ。',
];
$user->save($rules, $message);
第1引数にルール、第2引数にカスタムメッセージを渡せば OK.
Validation を適用したくない
これもよくあるパターンですね。その場合はこうしましょう。
$user->forceSave();
余談ですが、初めて使った時にハマりました。ドキュメントの斜め読みよくない。
この Model だけ、違うメッセージを出したい
その場合は、Model に $customMessages を定義ます。
class User extends Ardent {
public static $customMessages = [
'required' => 'パスワードを入れないとかどうかと思うよ。',
];
}
更新時は unique を適用しない
Laravel の Validaton には unique というルールがあり、これは対象テーブルのカラムの内容が unique かどうかを検査します。
しかし、更新時はそのルールが邪魔になってしまいます。この場合、save(ユニークを外したルール) とすることもできますが updateUniques
を使用するほうが
よりスマートです。
// 更新時、unique ルールを適用したくない場合
$user->updateUniques();
以上、4日目は Ardent というパッケージを紹介しました。明日は日本の Laravel 神である @HiroKws さんです!