問題点
ユーザーの情報のupdate時にそれ専用で作ったフォームリクエストを適用すると、フォームリクエストのバリデーション自体は効いているがその後バリデーションを通過したデータが更新(save)されない。
フォームリクエストを使いたいのですが誰か分かる方おりませんでしょうか?
補足
コントローラーのupdateメソッド内にフォームリクエストを適用せずにバリデーション処理を書くと、バリデーション後にデータは更新される。
- 使っているフォームリクエスト
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; // email項目で自分を無視するときにundefined $userの回避のため use Illuminate\Support\Facades\Auth; class UserProfileUpdateRequest 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() { // email項目で自分を無視するときにundefined $userの回避のため $user = Auth::user(); return [ 'name' => 'required|string|max:10| regex:/^[^ -~。-゚\x00-\x1f\t]+$/u', 'name_kana' => 'required|string|max:20| regex:/^[^ -~。-゚\x00-\x1f\t]+$/u| regex:/^[ァ-ヶー]+$/u', 'email' => ['required', 'string', 'email', Rule::unique("users")->ignore($user->id)], 'email_confirmation' => 'required|email|same:email', 'birth_day' => 'required|date', 'address' => 'required|max:40| regex:/^[^ -~。-゚\x00-\x1f\t]+$/u', 'job_type_id' => 'required', 'password' => 'required|min:4|max:8| regex:/^[a-zA-Z0-9]+$/u', ]; } }
- Usersコントローラー(フォームリクエスト適用時)
use App\Http\Requests\UserProfileUpdateRequest; public function update(UserProfileUpdateRequest $request, $user) { $user = User::findOrFail($user); // データの上書き $user->name = $request->name; $user->name_kana = $request->name_kana; $user->email = $request->email; $user->birth_day = $request->birth_day; $user->address = $request->address; $user->job_type_id = $request->job_type_id; // 保存 $user->save(); // フラッシュメッセージと共にリダイレクト return redirect('users/')->with('message', '情報を編集しました'); }
- Usersコントローラー(フォームリクエスト使わない)
public function update(Request $request, $user) { $user = User::findOrFail($user); // バリデーションルール $request->validate([ 'name' => [ 'required', 'string', 'max:10', 'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u' ], 'name_kana' => [ 'required', 'string', 'max:20', 'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u', 'regex: /^[ァ-ヶー]+$/u' ], 'email' => [ 'required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id), ], 'email_confirmation' => [ 'required', 'same:email' ], 'birth_day' => [ 'required', 'date' ], 'address' => [ 'required', 'max:40', 'regex: /^[^ -~。-゚\x00-\x1f\t]+$/u' ], 'job_type_id' => [ 'required' ], ] ); // データの上書き $user->name = $request->name; $user->name_kana = $request->name_kana; $user->email = $request->email; $user->birth_day = $request->birth_day; $user->address = $request->address; $user->job_type_id = $request->job_type_id; // 保存 $user->save(); // フラッシュメッセージと共にリダイレクト return redirect('users/')->with('message', '情報を編集しました'); }
あなたの回答
tips
プレビュー