ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 视图 ## 创建视图 ``` Route::get('/', function () { return view('greeting', ['name' => 'James']); }); <!-- 此视图文件位置 resources/views/greeting.blade.php --> <html> <body> <h1>Hello, {{ $name }}</h1> </body> </html> // 子目录,可以用「点」符号来引用嵌套视图 resources/views/admin/profile.blade.php return view('admin.profile', $data); ``` ### 判断视图文件是否存在 ``` use Illuminate\Support\Facades\View; if (View::exists('emails.customer')) { // } ``` ### 创建第一个可用视图 ``` return view()->first(['custom.admin', 'admin'], $data); use Illuminate\Support\Facades\View; return View::first(['custom.admin', 'admin'], $data); ``` ## 向视图传递参数 ``` return view('greetings', ['name' => 'Victoria']); return view('greeting')->with('name', 'Victoria'); ``` ### 与所有视图共享数据 如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的`boot`方法中调用视图 Facade 的`share`方法。例如,可以将它们添加到`AppServiceProvider`或者为它们生成一个单独的服务提供器: ``` <?php namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('key', 'value'); } /** * Register the service provider. * * @return void */ public function register() { // } } ``` >[success] 注意:注意,如果你创建了新的一个服务提供器来与所有视图共享数据,或者存放注册视图合成器的代码,那么你需要将这个服务提供器添加到配置文件`config/app.php`的`providers`数组中。 ## 视图合成器 [参考文章](https://blog.csdn.net/weixin_41800559/article/details/106792309) ### 创建视图服务 ``` $ php artisan make:provider ViewServiceProvider ``` ### 定义视图服务 每次渲染第一参数的视图时都会执行视图合成器`compose`方法。 ``` // 将这个服务提供器添加到配置文件 config/app.php 的 providers 数组中 'providers' => [ ... // 自定义视图服务 App\Providers\ViewServiceProvider::class, ], // 在boot方法设置共享数据 public function boot() { // 所有视图共享数据 View::share('shareParam1', 'Laravel1'); // 使用类注册视图合成器 View::composer( ['index', 'index1'], 'App\Http\View\Composers\ShareComposer' ); // 使用闭包函数注册视图合成器 View::composer(['index', 'index1'], function ($view) { $view->with('shareParam3', 'Laravel3'); }); } ``` **将视图合成器添加到多个视图** ``` // 将一个视图合成器添加到多个视图 View::composer( ['profile', 'dashboard'], 'App\Http\View\Composers\MyViewComposer' ); // 通配符`*`,表示将一个视图合成器添加到所有视图 View::composer('*', function ($view) { // }); ``` >[success] 第一个参数:`*`表示全部视图,`path/*`表示path目录内的视图,数组表示多个视图 ### 定义视图合成器 ``` // 手动创建目录 App\Http\View\Composers,新增 ShareComposer.php 文件 <?php namespace App\Http\View\Composers; use Illuminate\View\View; class ShareComposer { /** * Create a new share composer. * * @return void */ public function __construct() { // } /** * Bind data to the view. * * @param View $view * @return void */ public function compose(View $view) { $view->with('shareParam2', 'Laravel2'); } } ``` ### 模板显示数据 ``` // 在视图文件中使用共享数据 {{ $shareParam1 }} {{ $shareParam2 }} {{ $shareParam3 }} ``` ## 视图构造器 视图构造器在视图实例化之后执行,而视图合成器在视图即将渲染时执行。 ``` View::creator('profile', 'App\Http\View\Creators\ProfileCreator'); ```