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

未匹配的标注

本节说明

  • 对应视频第 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>  // 新建页面的链接
        .
        .

刷新页面:
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

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~