====== 【Laravel】requiredIf を使って新規登録の場合のみ必須チェックを行う ====== 新規登録時のみ、パスワードを必須とする例。 ===== routes\web.php ===== Route::prefix('user')->name('user.')->group(function(){ Route::get('', 'UserController@index')->name('home'); Route::get('create', 'UserController@create')->name('create'); Route::get('{user}/edit', 'UserController@edit')->name('edit'); Route::post('{user?}', 'UserController@store')->name('store'); }); ===== App\Http\Controllers\UserController ===== id)) { $user = new User(); } $user->fill($request->all()); // パスワードの入力があった場合のみ暗号化して保存 if (!is_null($request->password) && strlen($request->password) > 0 ) { $user->password = bcrypt($request->password); } $user->save(); return redirect(route('user.home')); } } ===== App\Http\Requests\UserRequest ===== 'bail|required|max:100', 'email' => 'bail|required|max:255|email:strict', 'password' => [ 'bail', // $this->user が null ならば必須 Rule::requiredIf(is_null($this->user ?? false)), 'between:8,32', ], ]; } public function prepareForValidation() { // 「全角」英数字を「半角」に変換 $this->merge(['email' => mb_convert_kana($this->email, 'a')]); $this->merge(['password' => mb_convert_kana($this->password, 'a')]); } public function attributes() { return [ 'name' => '名前', 'email' => 'メールアドレス', 'password' => 'パスワード', ]; } }