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');
}