Help us understand the problem. What is going on with this article?

Model で Validation したい? それならば Ardent だ!

More than 5 years have passed since last update.

はじめに

はい、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()) {
    // ちなみにこれが成功
}

わかりやすい! failspasses というひと目見てわかるメソッド名が素晴らしいですね。こういうところが Laravel のよいところです。

Ardent の導入

まずは composer.jsonrequire セクションに下記を追加

{
    "require": {
        "laravelbook/ardent": "dev-master"
    }
}

そして composer update で OK. 他のパッケージだと必要な ServiceProviderFacade の登録は必要ありません。

基本的な使い方

まず、対象の 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 さんです!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした