Laravel7共享通用数据的3种方法
为什么需要共享数据?
当我们开发一个项目的时候,有些数据是通用的,比如:侧边栏、底部等位置,这些数据是通用的。每一个类中写一遍,这是要命的,那么,偷懒的方法就来了,共享数据,一次定义多个视图中可以使用同一数据。
方法一、通过服务提供者共享数据
第一步:某个服务提供者中使用boot方法共享数据
// app/Probiders/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
// 所有视图中共享此数据
$data = [
[
'id' => 1,
'title' => '世界,你好',
'author'=> '自如初'
],
[
'id' => 2,
'title' => 'Laravel学习笔记',
'author'=> '自如初'
]
];
View::share('posts' , $data);
}
}
第二步:需要该使用数据的视图中使用\
// app/resources/index.blade.php
@foreach($posts as $post)
{{$post['id']}}
{{$post['title']}}
{{$post['author']}}
@endforeach
其它视图也是这样使用
方法二、通过 view composer指定共享数据的视图
使用方法参考 方法一,这里只列出服务提供者中的代码
// app/Probiders/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
// 只有index视图能使用该数据
View::composer('index',function($view){
$view->with('name','王美丽');
});
// 使用多个视图使用数组
View::composer(['index','dashboard'],function($view){
$view->with('age',18);
});
// 通配符指定
View::composer('index.*',function($view){
$view->with('gender','保密');
});
}
}
方法三、自定义数据共享类
第一步:创建目录(手动创建)
app/Http/ViewComposers/PostsComposer.php
第二步:共享数据
<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
// 共享文章数据类
class PostsComposer
{
// 注意咯,compose这个方法是固定的
public function compose(View $view)
{
$view->with('age1',17);
}
}
第三步:服务提供者使用
// app/Probiders/AppServiceProvider.php
public function boot()
{
View::composer('index',PostsComposer::class);
}
第四步:视图使用
总结:推荐使用前2种方法,简单易用易记。
请登录后再评论