laravel5.5框架中视图间如何共享数据?

2019-11-0707:46:10后端程序开发Comments1,790 views字数 2361阅读模式

laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

首先,需要注意的一点是:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

视图门面share()方法

有时需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1,一般情况下,我会在app\http\Controllers\xx下创建一个基础控制器 ,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

5文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

6文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

7文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

9文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

11文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

12文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

13文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

14文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

15文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

16文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

17文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

18文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

19文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

20文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

21文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

22文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

23文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

24文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

<?php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

namespaceApp\Http\Controllers\ExtMan;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

useIlluminate\Routing\Controller;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

classBaseController extendsController文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunction__construct(\Auth $auth)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        $this->initViewShare();   文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunctioninitViewShare()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        view()->share('action_name',get_action_name());文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

     }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

{{ $action_name}}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

get_action_name() 是自定义的一个函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

tips:
创建 app\Helpers\ , 的autoload引入文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

"files":[文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    "app/Helpers/"文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

运行 composer dump-autoload 会自动加载文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2,在 AppServiceProvider 服务提供器(或者新建提供器) 的boot方法中调用share()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

5文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

6文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

7文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

9文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

11文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

12文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

13文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

14文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

15文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

16文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

17文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

<?php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

namespaceApp\Providers;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

useView;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

classAppServiceProvider extendsServiceProvider文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunctionboot()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        View::share('key''value');文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        view()->share('name','共享数据片段');文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

视图门面composer()方法

视图合成器是当视图被渲染时的回调函数或类方法 ,如果你每次渲染视图时都要绑定视图的数据,比如用户登陆信息。可以使用composer() 将逻辑组织到一个单独的地方。
本例中,我们将在AppServiceProvider服务提供器中注册视图合成器,
提供器代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

5文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

6文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

7文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

9文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

11文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

12文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

13文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

14文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

15文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

16文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

17文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

18文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

19文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

20文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

21文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

22文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

23文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

24文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

25文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

<?php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

namespaceApp\Providers;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

#useIlluminate\Support\Facades\View;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

useIlluminate\Support\ServiceProvider;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

classAppServiceProvider extendsServiceProvider文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunctionboot()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        view()->composer(文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

            ['extman.*'], 'App\Http\ViewComposers\AuthComposer'文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        );文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        view()->composer('*',function($view){文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

            $view->with('user',array('name'=>'test','avatar'=>'/path/to/'));文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        });文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

other code文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

如果创建一个新的服务提供器来包含视图composer 注册,需要添加该服务提供者到配置文件 config/ 的 providers 数组中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

到此已经注册了视图合成器,每次渲染 extman目录下所有视图时都会执行 AuthComposer@compose 方法。
定义视图合成器类 App\Http\ViewComposers\AuthComposer.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

2文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

5文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

6文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

7文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

9文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

11文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

12文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

13文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

14文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

15文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

16文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

17文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

18文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

19文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

20文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

21文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

22文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

23文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

24文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

<?php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

namespaceApp\Http\ViewComposers;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

useIlluminate\View\View;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

useIlluminate\Repositories\UserRepository;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

classAuthComposer文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    protected$users;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunction__construct(UserRepository $users)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        $this->users = $users;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    publicfunctioncompose(View $view)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        $user_info= \Auth::user();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        $view->with('motto'$user_info);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

        $view->with('count'$this->users->count());文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

    }文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

视图被渲染前,AuthComposer类的 compose 方法被调用,同时 Illuminate\View\View 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

所有的视图合成器都会通过 服务容器 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17388.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/17388.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定