12.显示新建话题时的错误信息
- 本系列文章为
laracasts.com
的系列视频教程——Let's Build A Forum with Laravel and TDD 的学习笔记。若喜欢该系列视频,可去该网站订阅后下载该系列视频, 支持正版 ;- 视频源码地址:github.com/laracasts/Lets-Build-a-...;
- 本项目为一个 forum(论坛)项目,与本站的第二本实战教程 《Laravel 教程 - Web 开发实战进阶》 类似,可互相参照。
本节说明
- 对应视频第 12 小节:Validation Errors And Old Data
本节内容
现在我们通过访问 forum.test/threads/create 可以创建新的话题,但我们在主页面无法进入到创建页面。让我们来加上这一功能:
forum\resources\views\layouts\app.blade.php
.
.
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
<li><a href="/threads">All Threads</a></li>
<li><a href="/threads/create">New Thread</a></li> // 新建页面的链接
.
.
刷新页面:
现在我们可以点击New Thread
进入创建页面:
但是如果我们尝试不合法的提交:
点击Publish
按钮,会发现页面重新刷新:
因为不合法的提交被拒绝,页面重定向至create
页面。接下来需要把上一次提交的内容和错误的消息显示出来:
forum\resources\views\threads\create.blade.php
.
.
<div class="panel-body">
<form method="post" action="/threads">
{{ csrf_field() }}
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" value="{{ old('title') }}">
</div>
<div class="form-group">
<label for="body">Body</label>
<textarea name="body" id="body" class="form-control" rows="8">{{ old('body') }}</textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Publish</button>
</div>
@if(count($errors))
<ul class="alert alert-danger">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
</form>
</div>
.
.
再次尝试不合法提交:
因为我们定义了channel_id
为必填项,所以提交会不通过。修改创建页面:
forum\resources\views\threads\create.blade.php
.
.
<div class="panel-body">
<form method="post" action="/threads">
{{ csrf_field() }}
<div class="form-group">
<label for="channel_id">Choose a Channel</label>
<select name="channel_id" id="channel_id" class="form-control" required>
<option value="">Choose One...</option>
@foreach(App\Channel::all() as $channel)
<option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : ''}}>
{{ $channel->name }}
</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" value="{{ old('title') }}" required>
</div>
<div class="form-group">
<label for="body">Body</label>
<textarea name="body" id="body" class="form-control" rows="8" required>{{ old('body') }}</textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Publish</button>
</div>
@if(count($errors))
<ul class="alert alert-danger">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
</form>
</div>
.
.
尝试提交:
提交成功: