PHP - 2019-08-28

Laravel5.8でひらがなとカタカナのバリデーションを追加する方法

Laravel5.8でひらがなとカタカナのバリデーションを追加した際の手順をまとめました。

サービスプロバイダー作成

今回は CustomServiceProvider という名前で作る事にします。
まず、以下のコマンドを実行します。

php artisan make:provider CustomServiceProvider

コマンドを実行するとapp/Providers/CustomServiceProvider.phpが生成されます。
作成したapp/Providers/CustomServiceProvider.phpに以下を追記します。

app/Providers/CustomServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class CustomServiceProvider extends ServiceProvider
{
    
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('katakana', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/[ァ-ヴー]+/u', $value);
        });

        Validator::extend('hiragana', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/[ぁ-ん]+/u', $value);
        });

    }
}

作成したサービスプロバイダーを設定ファイルに追加

先ほど追記したapp/Providers/CustomServiceProvider.phpを使用できるようにconfig/app.phpprovidersに追加します。

config/app.php

'providers' => [
    ...

    App\Providers\CustomServiceProvider::class,

    ...
],

カスタムバリデーションをコントローラーで実装

コントローラー内にエラーメッセージを設定していますが、resources/lang/ja/validation.php内に追加することも可能です。

app/Http/Controllers/ContactController.php

<?php

namespace App\Http\Controllers;

use App\Contact;

use Illuminate\Http\Request;
use Session;
use Redirect;
use Validator;


class ContactController extends Controller {


    public function index() {
        return view('contact');
    }


    public function send(Request $request) {

        $this->validate($request, [
            'name_katakana' => 'required|katakana',
            'name_hiragana' => 'required|hiragana',
        ],  [
            'name_katakana.katakana' => ':attributeはカタカナで入力してください。',
            'name_hiragana.hiragana' => ':attributeはひらがなで入力してください。',
        ], [
            'name_katakana'      => '氏名(カタカナ)',
            'name_hiragana'      => '氏名(ひらがな)',
        ]);

        $contact = new Contact($request->all());
        return view('contact.send', compact('contact')); 
    }
}
Related Posts

Related Posts

Laravelでよく使うartisanコマンド

2018-04-25

laravelでMarkdownを使用する方法

2019-08-22

Datatables.jsで検索andページングandソート機能を実装

2017-08-01

laravel5.8 バリデーションの required でスペースのみだとエラーにならない

2019-09-02