laravel 视图——迹忆客-ag捕鱼王app官网
创建视图
视图包含应用程序提供的html,它将逻辑控制和页面展示进行分离。视图存储在resources/views
目录中。一个简单的视图可能看起来像这样:
因为该视图是存储在resources/views/greeting.blade.php
模版文件中,所以我们可以使用view
帮助函数将其返回,如下所示:
route::get('/', function () {
return view('greeting', ['name' => 'james']);
});
正如我们所见的,传递给view帮助函数的第一个参数与resources/views
目录中视图文件的名称相对应。第二个参数是应提供给视图的数据数组。在这种情况下,我们将传递name变量,该变量将使用blade语法显示在视图中。
视图也可以嵌套在resources/views
目录的子目录中。“.
”符号可用于引用嵌套视图。例如,如果我们的视图存储在resources/views/admin/profile.blade.php
文件中,则可以这样引用:
return view('admin.profile', $data);
查看目录名称中不应包含该.字符。
检查给定的视图是否存在
如果需要确定指定的视图是否存在,则可以使用view facade
的exists
方法。如果该视图存在,则exists
方法将返回true:
use illuminate\support\facades\view;
if (view::exists('emails.customer')) {
//
}
创建第一个可用视图
使用first
方法,我们可以创建存在于给定视图数组中的第一个视图。如果应用程序或程序包允许自定义或覆盖视图,这将非常有用:
return view()->first(['custom.admin', 'admin'], $data);
我们也可以通过view facade
调用此方法:
use illuminate\support\facades\view;
return view::first(['custom.admin', 'admin'], $data);
将数据传递到视图
如前面的示例所示,我们可以将数组传递给视图:
return view('greetings', ['name' => 'victoria']);
以这种方式传递数据时,数据应为具有键/值对的数组。然后,就可以在视图内部使用其对应的键(例如)。除了使用view的第二个参数传一个完整的数组方式之外,还可以使用
with
方法将单个数据段添加到视图中:
return view('greeting')->with('name', 'victoria');
与所有视图共享数据
有时,我们可能需要与应用程序呈现的所有视图共享一条数据。可以使用view facade
的share方法来执行此操作。通常,share在service provider
的boot方法内进行调用。我们可以将它们在appserviceprovider
中调用,也可以生成单独的service provider来执行它们:
view composer
view composer
是在呈现视图时调用的回调方法或某个类的方法。如果想要在每次渲染视图时将数据绑定到视图,view composer可以实现这个逻辑。
在下面示例中,我们在service provider内部注册view composer。我们将使用view facade
访问底层的illuminate\contracts\view\factory
接口实现。请记住,laravel不包括view composers的默认目录。我们可以随意组织它们。例如,我们可以创建一个app/http/view/composers
目录:
请记住,如果我们创建一个新的service provider 用来注册一个view composer,则需要将service provider 添加到配置文件config/app.php
中的providers数组中。
现在我们已经注册了composer,profilecomposer@compose
方法将在每次profile渲染视图时执行。因此,让我们定义composer类:
users = $users;
}
/**
* bind data to the view.
*
* @param view $view
* @return void
*/
public function compose(view $view)
{
$view->with('count', $this->users->count());
}
}
就在呈现视图之前,compose方法已经由illuminate\view\view
实例调用了。我们可以使用with方法将数据绑定到视图。
所有视图composer都通过service container 解析,因此我们可以加入类型限定,以了解编写器的构造函数中需要的任何依赖项。
将composer附加到多个视图
我们可以通过将视图数组作为该composer方法的第一个参数传递,将视图composer一次附加到多个视图:
view::composer(
['profile', 'dashboard'],
'app\http\view\composers\myviewcomposer'
);
composer方法还支持通配符*
,从而使我们可以将composer附加到所有视图:
view::composer('*', function ($view) {
//
});
视图 creator
视图creator
与视图composer
非常相似。不同的是creators在视图实例化立即执行,而不是等到视图将要渲染时才执行。要注册视图creator,请使用creator方法:
view::creator('profile', 'app\http\view\creators\profilecreator');
优化视图
默认情况下,视图是按需编译的。当执行渲染视图的请求时,laravel将确定该视图的编译版本是否存在。如果文件存在,laravel将确定未编译视图是否被更新。如果已编译视图不存在,或者未编译视图已被修改,laravel将重新编译该视图。
在请求期间编译视图会对性能产生负面影响,因此laravel提供了view:cache
命令来预编译应用程序使用的所有视图。为了提高性能,我们可能希望在部署过程中运行以下命令:
$ php artisan view:cache
我们可以使用view:clear
命令清除视图缓存:
$ php artisan view:clear
查看笔记