如何在Laravel中使用控制器进行“部分”视图?

问题描述 投票:4回答:3

这是我的情况。我有一个layout.blade.php,我的大多数页面使用。在这个文件中,我有一些我包含的部分内容,比如@include('partials.header')。我正在尝试使用控制器将数据发送到我的header.blade.php文件,但我很困惑这将如何工作,因为它包含在扩展layout.blade.php的每个视图中。

我想要做的是在我的数据库中检索具有今天日期的任何Game的记录(如果存在),并使用标题中的刀片显示详细信息。

我怎样才能做到这一点?

php laravel oop laravel-5 blade
3个回答
3
投票

我认为将那些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

0
投票

虽然它检索的属性与您选择的游戏属于不同,但您可以执行以下操作:

调节器

$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

0
投票

在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
© www.soinside.com 2019 - 2024. All rights reserved.