这是我的情况。我有一个layout.blade.php
,我的大多数页面使用。在这个文件中,我有一些我包含的部分内容,比如@include('partials.header')
。我正在尝试使用控制器将数据发送到我的header.blade.php
文件,但我很困惑这将如何工作,因为它包含在扩展layout.blade.php
的每个视图中。
我想要做的是在我的数据库中检索具有今天日期的任何Game
的记录(如果存在),并使用标题中的刀片显示详细信息。
我怎样才能做到这一点?
我认为将那些Game
定义为全球共享是可行的方式。
在您的AppServiceProvider启动方法中
public function boot()
{
view()->composer('partials.header', function ($view) {
view()->share('todayGames', \App\Game::whereDay('created_at', date('d')->get());
});
// or event view()->composer('*', Closure) to share $todayGames accross whole blade
}
像往常一样渲染刀片,部分刀头
@foreach ($todayGames as $game)
// dostuffs
@endforeach
虽然它检索的属性与您选择的游戏属于不同,但您可以执行以下操作:
调节器
$data = Game::select('id', 'name', 'published_date')->first();
return view('game')->with(compact('data'));
layout.blade.php
<html><head></head><body>
{{ $date }}
</body></html>
game.blade.php
@extend('layout')
@section('date', $data->date)
@section('content')
@endsection
在Laravel中,您可以创建一个服务类方法,其作用类似于控制器,并使用@inject指令在局部视图中访问它。这意味着您不需要在boot()中创建全局变量,也不需要将变量传递到每个控制器,或者通过基本视图layout.blade.php。
resources/views/header.blade.php:
@inject('gamesToday', 'App\Services\GamesTodayService')
@foreach ($gamesToday->getTodayGames() as $game)
// display game details
@endforeach