LoginSignup
13
14

More than 3 years have passed since last update.

laravelで独自のバリデーションルールを追加

Posted at

Laravelでカタカナのバリデーションを追加

laravel 5.8でやっています。

準備

ルールを作る

> php artisan make:rule KatakanaRule

ルールを決める

半角スペースと全角スペースも許容、エラーメッセージもvalidation.katakanaと指定

Rules/KatakanaRule.php
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class KatakanaRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return preg_match('/^[ァ-ヾ  〜ー−]+$/u', $value);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return trans('validation.katakana');
    }
}

エラーメッセージを定義する

'attributes'にフォームのnameを登録しておくと'name_sei_kanaはカタカナで入力してください。'とかにならない。

resources/lang/ja/validation.php

return [
    :
    :
    :
    'katakana'             => ':attributeはカタカナで入力してください。',

    'attributes' => [
        'name_sei_kana' => '姓(カナ)',
        'name_mei_kana' => '名(カナ)',
    ],

]

バリデーションを作る

画面に合ったルール名でバリデーションクラスを作る

> php artisan make:request HogeHogeValidateRequest

バリデーションを定義する

messages()で定義してもカスタムバリデーションは利用されないので、ここには定義しない(既に定義済み)
サービスプロバイダに定義すれば動くかな?とりあえず、そこまでしたくなかったのでこの定義で。

app/Http/Requests/HogeHogeValidateRequest

<?php

namespace App\Http\Requests;

use App\Rules\KatakanaRule;
use Illuminate\Foundation\Http\FormRequest;

class HogeHogeValidateRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name_sei_kana'               => [new KatakanaRule],
            'name_mei_kana'               => [new KatakanaRule],
        ];
    }

    /**
     * エラーメッセージのカスタマイズ
     * @return array
     */
    public function messages()
    {
        return [];
    }
}

以上

上記の定義でささっとカスタムバリデーションルールを追加できる。
他にも郵便番号チェックとか作ったり。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14