Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我如何使用一个控制器来;“部分”;拉威尔的风景?_Php_Laravel_Oop_Laravel 5_Blade - Fatal编程技术网

Php 我如何使用一个控制器来;“部分”;拉威尔的风景?

Php 我如何使用一个控制器来;“部分”;拉威尔的风景?,php,laravel,oop,laravel-5,blade,Php,Laravel,Oop,Laravel 5,Blade,这是我的情况。我有一个layout.blade.php,我的大多数页面都使用它。在这个文件中,我包含了一些片段,比如@include('partials.header')。我试图使用一个控制器将数据发送到我的header.blade.php文件,但我不清楚这到底是如何工作的,因为它包含在扩展layout.blade.php的每个视图中 我要做的是在我的数据库中检索任何游戏的一条记录,该记录的日期为今天的日期(如果存在),并在标题中使用blade显示详细信息 我怎样才能做到这一点 我认为,将这些游

这是我的情况。我有一个
layout.blade.php
,我的大多数页面都使用它。在这个文件中,我包含了一些片段,比如
@include('partials.header')
。我试图使用一个控制器将数据发送到我的
header.blade.php
文件,但我不清楚这到底是如何工作的,因为它包含在扩展
layout.blade.php
的每个视图中

我要做的是在我的数据库中检索任何
游戏
的一条记录,该记录的日期为今天的日期(如果存在),并在标题中使用blade显示详细信息


我怎样才能做到这一点

我认为,将这些
游戏定义为全球共享是一条可行之路

在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>
@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

更好的解决办法是这样

在应用程序文件夹下创建一个名为yourClassNameFacade的类。你的班级会是这样的

class yourClassNameFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'keyNameYouDecide';
    }
}
然后转到文件app/Providers/AppServiceProvider.php并添加到register函数

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();
        });
    }
然后,在您的视图中或您希望它出现在应用程序中的任何其他位置,您这样做是为了引用它

该视图包含以下代码:

{{ resolve('keyNameYouDecide') }}
如果要检查其中的内容,请执行以下操作:

{{ ddd(resolve('keyNameYouDecide')) }}
在代码中的任何其他地方,您都可以执行以下操作:

resolve('keyNameYouDecide'))

Laravel对此有一些要求。@ceejayoz这很方便,我肯定会使用它,但我不知道如何从数据库中提取数据来像这样使用它。
\App\Game::whereDate('date\u field',\Carbon\Carbon::now())->first()
?谢谢!视图生成器正是我所需要的。:)