Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ThinkPHP

  • FastAdmin

  • laravel

    • Laravel路由
    • Laravel ORM模型
    • Laravel请求
    • Laravel视图
      • 快速入门
      • 创建 & 渲染视图
        • 嵌套视图目录
        • 创建第一个可用的视图
        • 确定视图是否存在
        • 向视图传递数据
        • 向所有视图共享数据
      • 视图生成器
        • 视图创建器
      • 视图优化
    • Laravel Blade模板
    • Laravel Blade模板-组件
    • Laravel 响应
    • laravel常见问题
    • laravel数据迁移给表添加注释
    • laravel + dinggo + jwt搭建接口认证 用户认证
    • laravel中使用scss和tailwindcss
  • laravel-jetstream.vue

  • laravel常用扩展包

  • 《PHP框架》
  • laravel
mrcdh
2021-07-05
目录

Laravel视图

# 快速入门

所有的视图文件存放在 resources/views 目录下。一个简单的视图文件如下:

<!-- 本段代码存储在 resources/views/welcome.blade.php -->

<html>
  <body>
    <h1>Hello, {{ $name }}</h1>
  </body>
</html>
1
2
3
4
5
6
7

然后使用全局辅助函数 view 将其返回:

Route::get('/', function(){
  return view('welcome', ['name' => 'Mrcdh']);
});
1
2
3

# 创建 & 渲染视图

第一种方法,使用全局辅助函数 view 从应用程序的某个路由或控制器返回该视图。

Route::get('/', function(){
  return view('welcome', ['name' => 'Mrcdh']);
});
1
2
3

第二种方法,使用 View facade 返回视图:

use Illuminate\Support\Facades\View;

return View::make('welcome', ['name' => 'Mrcdh']);
1
2
3

第一个参数对应 resources/views 目录下的视图文件名。第二个参数是传递个视图的数组变量。

# 嵌套视图目录

使用 . 引用嵌套视图,如 resources/views/user/index.blade.php:

return view('user.index', $data);
1

# 创建第一个可用的视图

使用 View facade 的 first 方法,可以创建存在于给定视图数组中的第一个视图。

use Illuminate\Support\Facades\View;

return View::first(['custom.admin', 'admin'], $data);
1
2
3

# 确定视图是否存在

如果需要判断视图文件是否存在,可以使用 View facade。如果存在,exists 方法会返回 true :

use Illuminate\Support\Facades\View;

if (View::exists('welcome') || view()->exists('welcome')) {
  //
}
1
2
3
4
5

# 向视图传递数据

return view('greetings', ['name' => 'Victoria']);

return view('greeting')
        ->with('name', 'Victoria')
        ->with('occupation', 'Astronaut');
1
2
3
4
5

# 向所有视图共享数据

使用 View facade 的 share 方法来向所有视图中共享一段数据。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
  ...
  /**
    * 引导应用服务
    *
    * @return void
    */
  public function boot()
  {
    View::share('key', 'value');
    view()->share('key', 'value');
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 视图生成器

视图生成器是在呈现视图时调用的回调或类方法。 如果希望每次呈现视图时将数据自动绑定到视图中,则视图生成器可以帮助你将这些逻辑组织到一起。 如果应用程序中的多个路由或控制器返回同一个视图,并且始终需要特定的数据,那么视图生成器可能特别有用。 通常情况下,视图生成器在应用程序中的某个 服务提供者 里注册。 在本例中,我们将创建一个新的 App\Providers\ViewServiceProvider 来容纳本逻辑。 我们将使用 View facade 的 composer 方法来注册视图生成器。Laravel 没有存放视图生成器的默认目录,所以你可以随意地组织它们。 举个例子,你可以创建一个 app/Http/View/Composers 目录来存放应用中的所有的视图生成器:

namespace App\Providers;

use App\Http\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{

  /**
    * 引导应用服务
    *
    * @return void
    */
  public function boot()
  {
    // 使用基于类的生成器
    View::composer('profile', ProfileComposer::class);

    // 使用基于闭包的生成器
    View::composer('dashboard', function ($view) {
        //
    });

    // 将视图生成器添加到多个视图
    View::composer(
      ['profile', 'dashboard'],
      ProfileComposer::class
    );

    // 使用 * 将生成器应用到所有视图
    View::composer('*', function ($view) {
        //
    });
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

注意

记住,如果你创建了新的一个服务提供者来存放你注册视图生成器的代码,那么你需要将这个服务提供器添加到配置文件 config/app.php 的 providers 数组中。

现在我们注册了视图生成器,每次渲染 profile 视图的时候,都会执行 App\Http\View\Composers\ProfileComposer 类的 compose 方法。那么下面我们来定义视图生成器的这个类吧

namespace App\Http\View\Composers;

use App\Repositories\UserRepository;
use Illuminate\View\View;

class ProfileComposer
{
  /**
    * 用户库的实现
    *
    * @var \App\Repositories\UserRepository
    */
  protected $users;

  /**
    * 创建一个 profile 视图生成器
    *
    * @param  \App\Repositories\UserRepository  $users
    * @return void
    */
  public function __construct(UserRepository $users)
  {
    // 依赖项由服务容器自动解析...
    $this->users = $users;
  }

  /**
    * 绑定视图数据
    *
    * @param  \Illuminate\View\View  $view
    * @return void
    */
  public function compose(View $view)
  {
    $view->with('count', $this->users->count());
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 视图创建器

视图创建器 creators 和视图生成器非常相似。唯一不同之处在于视图创建器在视图实例化之后执行,而视图合成器在视图即将渲染时执行。 使用 creator 方法注册视图创建器:

use App\Http\View\Creators\ProfileCreator;
use Illuminate\Support\Facades\View;

View::creator('profile', ProfileCreator::class);
1
2
3
4

# 视图优化

预编译视图

php artisan view:cache
1

清除视图缓存

php artisan view:clear
1
#php#laravel
上次更新: 2023/09/22, 16:54:32
Laravel请求
Laravel Blade模板

← Laravel请求 Laravel Blade模板→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×