Laravel 与所有视图共享数据,最佳做法
我使用AppServiceProvider获取页面上的所有类别Laravel 与所有视图共享数据,最佳做法,laravel,laravel-8,Laravel,Laravel 8,我使用AppServiceProvider获取页面上的所有类别 类AppServiceProvider扩展了ServiceProvider { /** *注册任何应用程序服务。 * *@返回无效 */ 公共函数寄存器(){} /** *引导任何应用程序服务。 * *@返回无效 */ 公共函数boot() { view()->creator('layouts.app',函数($view){ //类别缓存 $categories=Cache::rememberForever('categories'
类AppServiceProvider扩展了ServiceProvider
{
/**
*注册任何应用程序服务。
*
*@返回无效
*/
公共函数寄存器(){}
/**
*引导任何应用程序服务。
*
*@返回无效
*/
公共函数boot()
{
view()->creator('layouts.app',函数($view){
//类别缓存
$categories=Cache::rememberForever('categories',function(){
返回类别::where(“parent_id”,“=”,null)->with('subcategory.subcategory')->get();
});
视图()->共享('categories',$categories);
});
}
}
数据可以在master layouts.app视图中访问,但不能在其包含的视图中访问。
因此,在我的layouts/app.blade.php中,我有这样一句话:@yield('content')
遗憾的是,包含的内容中没有变量$categories
。我怎样才能改变它
错误:未定义变量:categories
$categories])
但是它给出了错误htmlspecialchars()期望参数1是字符串,数组给定如果您使用view()->creator('layouts.app')
,则您在该回调中共享的每个变量将仅与layouts.app
视图和layouts.app
包含的任何视图共享
例如,如果您使用@extends
,一个名为example.blade.php
的新视图使用@extends('layouts.app')扩展了layouts.app
,那么在extends.blade.php视图中将无法访问类别变量,因为你对laravel说过只通过
view()->creator()`方法与
layouts.app共享该变量
@yield
指令用于显示给定节的内容
例如:
我的inc.test
视图包含以下内容:
包括“测试”视图。
@第节(“职位”)
Post id:{{$Post->id}测试
@端部
我的welcome.blade.php
视图包含inc.test
并生成post
部分,包含以下内容:
这是一个受欢迎的视图。
它有一个通过AppServiceProvider共享的'post'变量。
在这里,我将包含“inc.test”视图,并从该视图中生成post部分:
@包括(‘公司测试’)
@收益率(‘后’)
由于我通过服务提供商将post
变量与welcome
视图共享,因此welcome
包含的所有视图都可以使用该变量
view()->creator('welcome',function($view){
view()->share('post',post::first());
});
这是我的浏览器中的结果:
好的,你包括了inc.test,但是你能在@yield('post')中访问post吗?是的,@部分('post')
在我使用@yield
指令之前不会显示。Post-id:1测试来自于这个结果。@phpismyposion你能把你的观点添加到这个问题中吗?也许这有助于理解正在发生的事情。