如何将控制器用于"部分"在Laravel中查看?

时间:2017-05-07 00:58:20

标签: php laravel oop laravel-5 blade

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

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

我该如何使这项工作?

4 个答案:

答案 0 :(得分: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
}

像往常一样渲染刀片,partial.header blade

@foreach ($todayGames as $game)
  // dostuffs
@endforeach

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

更好的解决方案是这个

在您的应用文件夹下,创建一个名为yourClassNameFacade的类。您的课程如下所示。

class yourClassNameFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'keyNameYouDecide';
    }
}

然后转到文件app / Providers / AppServiceProvider.php并添加到注册功能

public function register()
    {
        $this->app->bind('keyNameYouDecide', function (){
            //below your logic, in my case a call to the eloquent database model to retrieve all items.
            //but you can return whatever you want and its available in your whole application.
            return \App\MyEloquentClassName::all();
        });
    }

然后在您的视图中或您希望在应用程序中的任何其他地方执行此操作以引用它。

view是以下代码:

{{ resolve('keyNameYouDecide') }}

如果要检查其中的内容,请执行以下操作:

{{ ddd(resolve('keyNameYouDecide')) }}

您在代码中的其他任何地方都可以做:

resolve('keyNameYouDecide'))