Laravel 中的视图共享数据

简介

  • 为了增强解视图代码的可维护性,我们除了要了解视图最基础的使用方式,还要对视图的共享数据方式做深入的了解,本文将介绍Laravel视图数据共享的常用方法。

通过 ServiceProvider “注册服务提供者”共享view数据

  • 通过ServiceProvider 来完成视图数据的共享是一种比较常用的方式之一。

  • 用到 Illuminate\Support\Facades\View::share('key', 'value');

  • 接下来做一个完整的举例,首先生成一个 ServiceProvider 通过 php artisan make:provider TestShareViewProvider 命令创建一个Provider 的模板。

    输入图片说明

  • 打开app/Providers/TestShareViewProvider.php 我们只是修改boot() 方法即可,因为,此方法在所有其他服务提供器都注册之后才会调用,这就意味着你可以调用其他注册的服务,这是一个好习惯尽可能不要在register 放置调用其他 Provider的功能。

  • 接下来把这个 ServiceProvider (服务提供者) 加入到 config/app.php
# 找到 `providers` 配置段落,添加刚才我们创建的服务提供者。
App\Providers\TestShareViewProvider::class

  • 接下来建立一个视图文件 resources/views/test-share.blade.php

{{$site_name}}

  • 简单的测试一下,在 /routes/web.php 添加一个路由
/**
 * 创建一个测试用的路由,加载页面如果正常显示共享的 sitename 那么就表示成功
*/
Route::get('/test/shareview', function() {
    return view("test-share", []);
});

  • 如果没有配置http服务器,测试的时候可以启动测试服务 $ php artisan serve

    输入图片说明

  • 访问 http://localhost:8000/test/shareview locahost:7003 是我本机的测试地址。

    image.png

ServiceProvider 共享数据的改进

  • 上面的方法,不适用太复杂的逻辑,会导致 Provider类的过于庞大。

  • 这就用到 View::composer(“viewname”, “DoClass”) 这个方法,通过这个方法可以指定到底是哪个视图可以应用到哪个类,其中,DoClass 必须具有 compose(View $view) 方法用于接收调用注入。

  • 为了测试上面的内容,我们在 app/Http/Views/Composers/下面创建一个 CLeftBarComposer.php 代码如下:

with('leftmsg', "This's left msg.");
    }
}

  • 建立好后修改 app/Providers/TestShareViewProvider.php 的内容:
class TestShareViewProvider extends ServiceProvider
{
    /**
     * 修改这个方法里里面的内容,新增 composer 解析
     * @return void
     */
    public function boot()
    {
        View::share("sitename", "Laravel - PHP");
        View::composer("test-share", "App\Http\Views\Composers\CLeftBarComposer");
    }

    /**
     * ....
     */
    public function register()
    {
        //
    }
}

  • 最后简单修改一下 resources/views/test-share.blade.php

{{$leftmsg}} {{$sitename}}

输入图片说明

你可能感兴趣的:(Laravel 中的视图共享数据)