新規作成時、更新時に任意のカラムの重複チェックを行う。
更新時、自分自身との重複エラーがでないよう対応済。
前提条件
テーブルのプライマリキーの名前は「id」。
ルーティング
Route::get('example/add', 'App\Http\Controllers\ExampleController@add')->name('example.add');
Route::post('example/add', 'App\Http\Controllers\ExampleController@create');
Route::get('example/edit', 'App\Http\Controllers\ExampleController@edit')->name('example.edit');
Route::post('example/edit', 'App\Http\Controllers\ExampleController@update');※新規作成時のアドレスが「example/add」、修正時が「example/edit」。
フォームリクエスト
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ExampleRequest extends FormRequest
{
public function authorize(): bool
{
if($this->path() == 'example/add' || $this->path() == 'example/edit'){
return true;
}else{
return false;
}
}
public function rules(): array
{
return [
'password' => 'required',
'name' => 'required|unique:examples,name,' . $this->id . ',id',
];
}
public function messages(): array
{
return [
'password.required' => 'パスワードは必須です',
'name.required' => '名前は必須です',
'name.unique' => '既に登録済みの名前です',
];
}
}
※2つのカラムのチェックをしている。カラム「password」は必須入力、「name」は必須入力と重複チェック。
※authorizeメソッドに、フォームリクエストを使用するアドレスでのアクセスはtrueを返すよう記述。
コントローラ【新規作成時】
public function add(Request $request){
return view('example.add');
}
public function create(ExampleRequest $request){
$input = $request->all();
Example::create($input);
return redirect()->route('example.index');
}※POST時(createメソッド)のリクエストにオリジナルの「ExampleRequest」を使用している。
コントローラ【更新時】
public function edit(Request $request){
$example = Example::find($request->id);
return view('example.edit',['form' => $example]);
}
public function update(ExampleRequest $request){
$example= Example::find($request->id);
$example->update($request->all());
return redirect()->route('example.index');
}※POST時(updateメソッド)のリクエストにオリジナルの「ExampleRequest」を使用している。
ビューテンプレート(新規作成時)example.add
@section('content')
@if(count($errors) > 0)
<ul class="error">
@foreach ($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
@endif
<form action="{{url('')}}/example/add" method="post">
@csrf
<ul>
<li>ドメイン名:<input type="text" name="name" value="{{old('name')}}" /></li>
<li>パスワード:<input type="text" name="password" value="{{old('password')}}" /></li>
</ul>
<input type="submit" value="登録">
</form>
@endsectionビューテンプレート(更新時)example.edit
@section('content')
@if(count($errors) > 0)
<ul class="error">
@foreach ($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
@endif
<form action="{{url('')}}/example/edit" method="post">
@csrf
<input type="hidden" name="id" value="{{$form->id}}">
<ul>
<li>名前:<input type="text" name="name" value="{{$form->name}}" /></li>
<li>パスワード:<input type="text" name="password" value="{{$form->password}}" /></li>
</ul>
<input type="submit" value="修正する">
</form>
@endsection



コメントを残す