2017.9.10
Livvon#3【Laravel5.4でのフォームリクエストバリデーション】
本日の成果。
フォームリクエストバリデーションなのですが、Laravel5.4を使うことで少し勝手が変わっていたのでその部分をちろっとメモ。
昔の記事が不親切すぎて自分で勝手に混乱してただけの可能性もある
記憶を掘り返して、手順としては...
1.FormRequestを継承したバリデーション用クラスを作成
|
$ php artisan make:request CreateUser
|
これで
CreateUserRequestが
App/Http/Requests/に生成されます。
2.CreateUserRequestを編集
authrize()の返り値をtrueにして、
rules()にバリデーションルールを追記します。
public function rules() {
return [
'nameLast' => 'sometimes|required',
'nameLastKana' => 'sometimes|required|regex:/^[ぁ-ん]+$/',
'nameFirst' => 'sometimes|required',
'nameFirstKana' => 'sometimes|required|regex:/^[ぁ-ん]+$/',
'email' => 'sometimes|required|email|unique:users,email',
'password' => 'sometimes|required|min:8|confirmed',
'tel' => 'sometimes|required|regex:/^[0-9]{10,11}$/',
'sex' => 'sometimes|required|in:0,1',
'age' => 'sometimes|required|numeric|between:0,120',
'addressCountryCode' => 'sometimes|required',
'addressPostalCode' => 'sometimes|required',
'addressPrefecture' => 'sometimes|required',
'addressMunicipality' => 'sometimes|required',
'addressLocalName' => 'sometimes|required',
];
}
public function messages() {
return [
'tel.regex' => '携帯電話番号が正しくありません。',
];
}
今はこんな感じです。プロトタイプなので結構ザルに作ってますが、流石にもう少し考えます。
字数制限とかもそのうちつけるかと思われます。
messages()をオーバーライドすることで、エラーメッセージを個別に定義することもできます。
今のところは多少不格好ですけど、携帯電話番号だけで良いでしょう。
今は特に何もやっていないのですが、世の中には「全角」と「半角」の区別がつかない人種がいることを数年前に知ったので(笑)、javascriptでそのあたりを置換してあげる計画はありますが今は実装しません。本質ではないので(笑)
3.resource/lang/ja/validation.phpを作成・編集
なかったら作って下さい。
参考までに、昔僕が作った日本語バリデーションファイルがあります。
'attributes' => [
'nameLast' => '姓',
'nameLastKana' => '姓(かな)',
'nameFirst' => '名',
'nameFirstKana' => '名(かな)',
'email' => 'メールアドレス',
'password' => 'パスワード',
'tel' => '携帯電話番号',
'sex' => '性別',
'age' => '年齢',
'addressCountryCode' => '国',
'addressPostalCode' => '郵便番号',
'addressPrefecture' => '都道府県',
'addressMunicipality' => '市区町村',
'addressLocalName' => '番地',
]
あとはこんなのを後ろにくっつけると、項目名のIDを日本語に置換できます。
あと、本来最初にやっておくべきことかも知れませんが、
config/app.phpの
locale値を
’ja’に変えておかないと動作しないのであしからず。
4.コントローラーにuse値を付記
この例の場合
use App\Http\Requests\CreateUserRequest;って書けばいいです。
ちなみに、自動生成されるコントローラーに対しての適用方法がわからなかったので、結局認証のコントローラーは自作に変更です。
とはいえ、自作してもかなり楽ができるので正直手間としてはそんな変わらないような気がします。ただ、ログイン機能は巻き添えを食らって機能停止してるので、その辺をまた書かなきゃなぁって感じですね。まぁすぐ書けると思うんですけどね。
で、次にやるべきことはこのプロトタイプでの新たな関門として出現した
ジオコーディングというところをやらなくてはならなくなりました。
これに関しては次回。(笑)