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()
?谢谢!视图生成器正是我所需要的。:)