请选择 进入手机版 | 继续访问电脑版

[PHP编程] laravel多视图共享数据实例代码

  [复制链接]
查看366 | 回复81 | 2021-9-13 06:24:19 | 显示全部楼层 |阅读模式
目次

媒介

在做项目中,网站前台或者后台有些数据必要 在多个视图页面利用 ,比方 用户基本信息数据,菜单展示数据。起首 想到的是在每个控制器里传入这些必要 的数据,但显然这并不科学。经查视图文档相识 ,可以利用 视图间共享数据和视图Composer办理 。

在视图间共享数据

偶然 候我们必要 在全部 视图之间共享数据片断 ,这时间 可以利用 视图工厂的 share 方法,通常,必要 在服务提供者的 boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或天生 独立的服务提供者来存放它们:

  1. <?php
  2. namespace App\Providers;
  3. class AppServiceProvider extends ServiceProvider
  4. {
  5. /**
  6. * 启动所有应用服务
  7. *
  8. * @return void
  9. */
  10. public function boot()
  11. {
  12. view()->share('name', 'dashuai');
  13. }
  14. /**
  15. * 注册服务提供者
  16. *
  17. * @return void
  18. */
  19. public function register()
  20. {
  21. //
  22. }
  23. }
复制代码

在各视图中利用 $name 即可调用。

视图Composer

视图Composer 是当视图被渲染时的回调或类方法。假如 你有一些数据要在视图每次渲染时都做绑定,可以利用 视图 Composer 将逻辑构造 到一个单独的地方。

起首 要在服务提供者中注册视图 Composer,我们将会利用 辅助函数 view 来访问 Illuminate\Contracts\View\Factory 的底层实现,记住,Laravel 不会包含默认的视图 Composer 目次 ,我们可以按照本身 的喜欢 构造 其路径,比方 可以创建一个 App\Http\ViewComposers 目次 :

  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Support\ServiceProvider;
  4. class ComposerServiceProvider extends ServiceProvider
  5. {
  6. /**
  7. * 在容器中注册绑定.
  8. *
  9. * @return void
  10. * @author http://laravelacademy.org
  11. */
  12. public function boot()
  13. {
  14. // 使用基于类的composers...
  15. view()->composer(
  16. 'profile', 'App\Http\ViewComposers\ProfileComposer'
  17. );
  18. // 使用基于闭包的composers...
  19. view()->composer('dashboard', function ($view) {
  20. });
  21. }
  22. /**
  23. * 注册服务提供者.
  24. *
  25. * @return void
  26. */
  27. public function register()
  28. {
  29. //
  30. }
  31. }
复制代码

假如 创建一个新的服务提供者来包含视图 Composer 注册,必要 添加该服务提供者到设置 文件 config/app.php 的 providers 数组中。

现在 我们已经注册了 Composer,每次 profile 视图被渲染时都会实验 ProfileComposer@compose,接下来我们来定义该 Composer 类:

  1. <?php
  2. namespace App\Http\ViewComposers;
  3. use Illuminate\Contracts\View\View;
  4. use Illuminate\Users\Repository as UserRepository;
  5. class ProfileComposer
  6. {
  7. /**
  8. * 用户仓库实现.
  9. *
  10. * @var UserRepository
  11. */
  12. protected $users;
  13. /**
  14. * 创建一个新的属性composer.
  15. *
  16. * @param UserRepository $users
  17. * @return void
  18. */
  19. public function __construct(UserRepository $users)
  20. {
  21. // Dependencies automatically resolved by service container...
  22. $this->users = $users;
  23. }
  24. /**
  25. * 绑定数据到视图.
  26. *
  27. * @param View $view
  28. * @return void
  29. */
  30. public function compose(View $view)
  31. {
  32. $view->with('count', $this->users->count());
  33. }
  34. }
复制代码

视图被渲染前,Composer 类的 compose 方法被调用,同时 Illuminate\Contracts\View\View 被注入该方法,从而可以利用 其 with 方法来绑定数据到视图。

添加 Composer 到多个视图

你可以传递视图数组作为 composer 方法的第一个参数来一次性将视图 Composer 添加到多个视图:

  1. view()->composer(
  2. ['profile', 'dashboard'],
  3. 'App\Http\ViewComposers\MyViewComposer'
  4. );
复制代码

composer 方法担当 * 通配符,从而答应 将一个 Composer 添加到全部 视图:

  1. view()->composer('*', function ($view) {
  2. //
  3. });
复制代码

总结

到此这篇关于laravel多视图共享数据的文章就先容 到这了,更多相干 laravel多视图共享数据内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 123457276 | 2021-9-13 08:56:42 | 显示全部楼层
admin楼主的帖子提神醒脑啊!
回复

使用道具 举报

avatar 工兵班长纬 | 2021-9-15 22:19:56 | 显示全部楼层
没人理我,好伤心啊!
回复

使用道具 举报

avatar 陈辞滥调 | 2021-9-18 02:24:29 | 显示全部楼层
admin楼主的病历本丢我这里了!
回复

使用道具 举报

avatar 郭光庆 | 2021-9-18 02:24:32 | 显示全部楼层
勤奋灌水,天天向上!
回复

使用道具 举报

avatar 李圆子wzl | 2021-9-20 06:17:16 | 显示全部楼层
admin楼主写的很经典!
回复

使用道具 举报

avatar 郭光庆 | 2021-9-21 02:44:29 | 显示全部楼层
最近回了很多帖子,都没人理我!
回复

使用道具 举报

avatar 井底燕雀傥 | 2021-10-1 22:02:52 | 显示全部楼层
楼上的真不讲道理!
回复

使用道具 举报

avatar 123457390 | 2021-10-5 03:10:47 | 显示全部楼层
读了admin楼主的帖子,顿时马桶就通了。。。
回复

使用道具 举报

avatar 京托胡速越 | 2021-10-7 03:31:50 | 显示全部楼层
admin楼主内心很强大!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则