laravelにてバリデーションのエラーメッセージが表示できません。
解決したいこと
laravelにて簡易ツイートアプリを作成中です。
controllerにてバリデーションを設け、バリデーションに引っかかった際はエラーメッセージが表示されるようにviewに記述しました。
試しにバリデーションにあえて引っかかるようにツイート本文を空欄にして投稿してみましたが、エラーメッセージが出ませんでした。
ちなみに、うまく表示されたときのコードもあります。
そちらを使えればよいのでは?と思われるかもしれませんが、laravel公式のbladeテンプレートを用いたバリデーションエラー(以下のリンク先のように記述しました)に合わせて記述しております。
https://readouble.com/laravel/8.x/ja/blade.html
うまくは行きましたが、なぜ公式通りの記述(のはず)で機能しないのか気になるため、どなたかわかる方ご教示いただけますと幸いです。
発生している問題・エラー
該当するソースコード
controllerファイル(Tweetcontroller.php)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Tweet;
class Tweetcontroller extends Controller
{
public function index()
{
$tweets = Tweet::all();
return view('index',[
'tweets' =>$tweets
]);
}
public function create()
{
return view('create');
}
public function store(Request $request)
{
$this->validate($request,[
'body'=>['required', 'string', 'max:255'] //バリデーション部分
]);
$tweet = new Tweet;
$tweet->body = $request->input('body');
$tweet->save();
$request->session()->flash('flash_message', 'ツイートの新規登録が完了しました。') ;
return redirect('/tweets');
}
//以下省略
}
viewファイル(create.blade.php)
@extends('layouts/default')
@section('page-title')
ツイート新規投稿
@endsection
@section('content')
<div class="col-md-12">
<form action="{{ Route('tweets.index') }}" method="post">
@csrf
<div class="form-group row">
<label for="tweet" class="col-xs-2 col-form-label">ツイート本文</label>
<div class="col-xs-10">
<input id="tweet" type="text" name="body" class="form-control @error('tweet') is-invalid @enderror" placeholder="ツイート本文を入力してください。" value="{{old('body')}}">
@error('tweet')
<div class="alert alert-danger">{{$message}}</div>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button type="submit" class="btn btn-primary">投稿する</button>
</div>
</div>
</form>
</div>
@endsection
うまくいった時のソースコード
viewファイル(create.blade.php)
@extends('layouts/default')
@section('page-title')
ツイート新規投稿
@endsection
@section('content')
<div class="col-md-12">
@if(count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ Route('tweets.index') }}" method="post">
@csrf
<div class="form-group row">
<label for="tweet" class="col-xs-2 col-form-label">ツイート本文</label>
<div class="col-xs-10">
<input type="text" name="body" class="form-control " placeholder="ツイート本文を入力してください。" value="{{old('body')}}">
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button type="submit" class="btn btn-primary">投稿する</button>
</div>
</div>
</form>
</div>
@endsection
環境
laravel 8
php 7.2.4
0