Ruleの作成

Validationにオリジナルのルールを追加することができます。

\app\Rules の配下にルールを書いたPHPファイルを置きます。

例として全角カタカナ入力のルール

Zenkakurule.php

class Zenkakurule 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('/\A[ァ-ヶー]+\z/u',$value);
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return ':attribute は全角カタカナで入力してください';
    }
}

使用するときはControllerに書いてもよい。

 $request->validate([
            'company_name' => ['required',new Hankakurule],
        ]);

複雑なルールになるときは、Requestを作成した方がわかりやすい。

例: \app\Http\Request\Storepost.php

<?php

namespace App\Http\Requests;

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

class StorePost 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 [
            'company_name' => 'required',
            'store_name' => 'required',
            'abbreviation' => ['required',new Zenkakurule],	
            'postal_code' => 'required',
            'pref_id' => 'required',
            'sort_no' => 'integer|min:0|max:900',
            'addr01' => 'required',
            'addr02' => 'required',
            'phone_number' => 'required',
            'manager' => 'required',
            'mobile_number' => 'required',
            'mobile_email' => 'required',
            'headquarters_id' => 'required',
            'create_id'=> 'integer',
            'update_id'=> 'integer'
        ];
    }
}

authorizeをtrueにして使用を許可する。

受けるControllerでは、引数のRequestのところを変更する。

StoreController.php

 public function store(StorePost $request)
    {
        $item = new Store;
        $form = $request->all();
        unset($form['_token']);
        $item->fill($form)->save();
        return redirect('companies/store');
    }