Laravel7共享通用数据的3种方法

作者: 温新

分类: 【Laravel】

阅读: 3060

时间: 2020-05-31 15:38:55

为什么需要共享数据?

当我们开发一个项目的时候,有些数据是通用的,比如:侧边栏、底部等位置,这些数据是通用的。每一个类中写一遍,这是要命的,那么,偷懒的方法就来了,共享数据,一次定义多个视图中可以使用同一数据。

方法一、通过服务提供者共享数据

第一步:某个服务提供者中使用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);
    }
}
// 实际开发中使用是数据库的数据,将这$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种方法,简单易用易记。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年05月31日

请登录后再评论