Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@satoysan

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

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 [];
    }
}

以上

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

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
15
Help us understand the problem. What are the problem?