我使用 AppServiceProvider 获取页面上的所有类别。
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register() {}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->creator('layouts.app', function($view) {
//Categories cache
$categories = Cache::rememberForever('categories', function () {
return Category::where("parent_id", "=", null)->with('subcategory.subcategory')->get();
});
view()->share('categories', $categories);
});
}
}
数据可在主 layouts.app 视图中访问,但不能在其包含的视图中访问。
所以在我的 layouts/app.blade.php 我有这个:@yield('content')
遗憾的是,包含的内容中不存在变量 $categories
。怎么改?
错误:Undefined variable: categories
<- 但仅在使用该变量的页面上,它可以在 app.blade.php 上访问,我在其中显示类别,但不能在它包含的视图中访问
我试过了:
@yield('content', ['categories' => $categories])
但它给出了错误 htmlspecialchars() expects parameter 1 to be string, array given
答案 0 :(得分:0)
如果您使用 view()->creator('layouts.app')
,则您在该回调中共享的每个变量将仅与 layouts.app
视图和 layouts.app
包含的任何视图共享。
例如,如果您使用 @extends
,名为 example.blade.php
的新视图使用 layouts.app
categories@extends('layouts.app'), the
extends.blade.php{{ 扩展 variable will not be accessible in
1}}layouts.appview, since you said to laravel to share that variable only with
view()->creator()` 方法。
via
指令用于显示给定部分的内容。
示例:
我的 @yield
视图包含以下内容:
inc.test
我的 <br>
view `test` included.
<br>
@section('post')
Post id: {{ $post->id }} test
@endsection
视图包含 welcome.blade.php
并生成 inc.test
部分,具有以下内容:
post
由于我通过服务提供商与 This is the welcome view.
<br>
It has a `post` variable shared via AppServiceProvider.
<br>
<br>
<br>
Here i'm including 'inc.test' view and yielding the post section from that view:
<br>
<br>
@include('inc.test')
@yield('post')
视图共享了 post
变量,因此它可用于 welcome
包含的所有视图。
welcome
这是我浏览器中的结果: