【6】 未入力のまま投稿できないように エラー表示させよう
■ バリデーション を設定する
データを作成 / 更新する箇所 にバリデーションを追加する。
app/Http/Controllers/PostController.php
の store アクションと update アクションに追加
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'content' => 'required',
]);
$post = new Post();
$post->title = $request->input('title');
$post->content = $request->input('content');
$post->save();
return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully created.');
}
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required',
'content' => 'required',
]);
$post->title = $request->input('title');
$post->content = $request->input('content');
$post->save();
return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully updated.');
}
↓↓↓ 下記を追加 ↓↓↓
$request->validate([
'title' => 'required',
'content' => 'required',
]);
バリデーションチェック に失敗した際の
エラーメッセージを表示できるようにしよう。
resources/views/posts/create.blade.php
を変更。
<h1>New Post</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
resources/views/posts/edit.blade.php
にもエラーメッセージを表示させる。
<h1>Editing Post</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
■ バリデーションエラー時のデータを保持しよう。
resources/views/posts/create.blade.php
の input と textarea を変更
<form method="POST" action="/posts">
{{ csrf_field() }}
<div class="form-group">
<label for="exampleInputEmail1">Title</label>
<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{old('title')}}">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Content</label>
<textarea class="form-control" name="content">{{old('content')}}</textarea>
</div>
<button type="submit" class="btn btn-outline-primary">Submit</button>
</form>
変更部分
<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{old('title')}}">
と
<textarea class="form-control" name="content">{{old('content')}}</textarea>
resources/views/posts/edit.blade.php
を変更
<form method="POST" action="/posts/{{ $post->id }}">
{{ csrf_field() }}
<input type="hidden" name="_method" value="PUT">
<div class="form-group">
<label for="exampleInputEmail1">Title</label>
<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{ old('title') == '' ? $post->title : old('title') }}">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Content</label>
<textarea class="form-control" name="content">{{ old('content') == '' ? $post->content : old('content') }}</textarea>
</div>
<button type="submit" class="btn btn-outline-primary">Submit</button>
</form>
変更部分
<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{ old('title') == '' ? $post->title : old('title') }}">
と
<textarea class="form-control" name="content">{{ old('content') == '' ? $post->content : old('content') }}</textarea>
■ 実際にエラーが表示されるか、確認!!
php artisan serve --port=8080
を実行。( ローカルサーバーを起動 )
localhost:8000/posts/create
にアクセス。
空欄のまま、[ Submit ] をクリック。
エラーが表示されれば、バリデーション の実装は完了☆
■ GitHub(ギットハブ) で 変更内容を保存
git add .
git commit -m “set validation”
次は 。。。