13.视图共享数据

未匹配的标注

本节说明#

  • 对应视频第 13 小节:Extracting to View Composers

本节内容#

本节的内容比较简单,主要是对前面章节的内容进行优化。
在前面的章节中,我们使用了 App\Channel::all() 这样简单粗暴的办法来获取所有的 channel,现在让我们更优雅地重写这段代码。我们将使用 Laravel视图共享数据 功能:

如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的 boot 方法中调用视图 Facade 的 share 方法。例如,可以将它们添加到 AppServiceProvider 或者为它们生成一个单独的服务提供器。

让我们来使用此功能:
forum\app\Providers\AppServiceProvider.php

.
.
public function boot()
{
    Carbon::setLocale('zh');
    \View::share('channels',\App\Channel::all());
}
.
.

现在我们可以在视图中直接使用 $channels 变量:
forum\resources\views\layouts\app.blade.php

.
.
<ul class="dropdown-menu">
    @foreach($channels as $channel)  -->此处使用 $channels
        <li><a href="/threads/{{ $channel->slug }}">{{ $channel->name }}</a> </li>
    @endforeach
</ul>
.
.

forum\resources\views\threads\create.blade.php

.
.
<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($channels as $channel)  -->此处使用 $channels
            <option value="{{ $channel->id }}" {{ old('channel_id') == $channel->id ? 'selected' : ''}}>
                {{ $channel->name }}
            </option>
        @endforeach
    </select>
</div>
.
.

访问页面,一切如常:
file

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

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~