Menu

12.显示新建话题时的错误信息

本节说明

  • 对应视频第 12 小节:Validation Errors And Old Data

本节内容

现在我们通过访问 http://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>  // 新建页面的链接
        .
        .

刷新页面:
file
现在我们可以点击New Thread进入创建页面:
file
但是如果我们尝试不合法的提交:
file
点击Publish按钮,会发现页面重新刷新:
file
因为不合法的提交被拒绝,页面重定向至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>
.
.

再次尝试不合法提交:
file
因为我们定义了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>
.
.

尝试提交:
file
提交成功:
file

本文章首发在 Laravel China 社区
上一篇 下一篇
讨论数量: 0
发起讨论


暂无话题~
刻意练习,每日精进。
4
点赞
254
浏览
0
讨论

维护者
14
14