Laravel5.1学习笔记7 视图
视图 (View)
#基本用法
视图里面包含了你应用程序所提供的 HTML 代码,并且提供一个简单的方式来分离控制器和网页呈现上的逻辑。视图被保存在 resources/views
文件夹内。
一个简单的视图看起来可能像这样:
<!-- 视图被保存在 resources/views/greeting.php --> <html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
这个视图可以使用以下的代码传递到用户的浏览器:
Route::get('/', function()
{
return view('greeting', ['name' => 'James']);
});
如你所见,view
辅助方法的第一个参数会对应到 resources/views
文件夹内视图文件的名称;传递到 view
辅助方法的第二个参数是一个能够在视图内取用的数据数组。
当然,视图文件也可以被存放在 resources/views
的子文件夹内。举例来说,如果你的视图文件保存在resources/views/admin/profile.php
,你可以用以下的代码来返回:
return view('admin.profile', $data);
检查视图是否存在
如果你需要检查views是否存在,你需要使用exists方法 , 在调用无参数view辅助方法之后使用,这个方法返回true ,如果视图存在,当无参数的view辅助方法调用后,一个Illuminate\Contracts\View\Factory 实例被返回, 你可以使用实例里面的任何方法。
if (view()->exists('emails.customer')) {
//
}
#传递数据到视图
// 使用传统的方法
$view = view('greeting')->with('name', 'Victoria'); // 使用魔术方法
$view = view('greeting')->withName('Victoria');
在上面的例子代码中,视图将可以使用 $name
来取得数据,其值为 Victoria
。
如果你想的话,还有一种方式就是直接在 view
辅助方法的第二个参数直接传递一个数组:
$view = view('greetings', $data);
如果你使用上面的方法来进行数据传参, $data
必须是 键/值 对应的数组数据, 这样在视图里面, 你可以使用对应的键来获取值, 如: {{ $key }}
会取得 $data['key']
对应的数据.
#把数据共享给所有视图
有时候你可能需要共享一些数据给你的所有视图,你有很多个选择:share
辅助方法;
这里有个 share
辅助方法的例子:
view()->share('data', [1, 2, 3]);
你也可以使用 view
的 Facade:
View::share('data', [1, 2, 3]);
通常你应该在服务提供者的 boot
方法内使用 share
方法。你可以选择加在 AppServiceProvider
或者是新建一个单独的服务提供者来容纳这些代
码。
<?php namespace App\Providers; 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()
{
//
}
}
备注: 当
view
辅助方法没有带入任何参数调用时,它将会返回一个的Illuminate\Contracts\View\Factory
合约 (contract) 的实现 (implementation)。
从一个文件路径产生视图
你可以从一个完整的文件路径来产生一个视图:
return view()->file($pathToFile, $data);
#视图组件 View Composers
View composers are callbacks or class methods that are called when a view is rendered. If you have data that you want to be bound to a view each time that view is rendered, a view composer can help you organize that logic into a single location.
视图组件就是在视图被渲染前,会调用的闭包或类方法。如果你想在每次渲染某些视图时绑定数据,视图组件可以把这样的程序逻辑组织在同一个地方。
Let's register our view composers within a service provider. We'll use the view
helper to access the underlying Illuminate\Contracts\View\Factory
contract implementation. Remember, Laravel does not include a default directory for view composers. You are free to organize them however you wish. For example, you could create anApp\Http\ViewComposers
directory:
让我们在 服务提供者 内组织我们的视图组件。底下例子将使用 View
辅助类来取得底层Illuminate\Contracts\View\Factory
合约的实现:
备注: Laravel 没有默认的文件夹来放置类形式的视图组件。你可以自由的把它们放在你想要的地方。举例来说,你可以放在
App\Http\ViewComposers
文件夹内。
记得要把这个服务提供者添加到 config/app.php
配置文件的 providers
数组中。
现在我们已经注册了视图组件,并且在每次 profile
视图渲染的时候,ProfileComposer@compose
都将会被执行。接下来我们来看看这个类要如何定义:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class ComposerServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function boot()
{
// Using class based composers...
view()->composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
); // Using Closure based composers...
view()->composer('dashboard', function ($view) { });
} /**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
<?php namespace App\Http\ViewComposers; use Illuminate\Contracts\View\View;
use Illuminate\Users\Repository as UserRepository; class ProfileComposer { /**
* The user repository implementation.
*
* @var UserRepository
*/
protected $users; /**
* Create a new profile composer.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
// service container 会自动解析所需的参数
$this->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\Contracts\View\View
实例。你可以使用 with
方法来把数据绑定到 view
。
备注: 所有的视图组件会被 服务容器 (service container) 解析,所以你需要在视图组件的构造器 type-hint (类型限制) 你所需的任何依赖参数。
在视图组件内使用通配符
View
的 composer
方法可以接受 *
作为通配符,所以你可以对所有视图附加 composer
如下:
View::composer('*', function($view)
{
//
});
同时对多个视图附加视图组件
你也可以同时针对多个视图附加同一个视图组件:
View::composer(['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer');
定义多个视图组件 (5.1文档删除了这个部分)
你可以使用 composers
方法来同时定义一群视图组件:
View::composers([
'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'],
'App\Http\ViewComposers\UserComposer' => 'user',
'App\Http\ViewComposers\ProductComposer' => 'product'
]);
视图创建者
视图 创建者 几乎和视图组件运作方式一样;只是视图创建者会在视图初始化后就立刻执行。要注册一个创建者,只要使用 creator
方法:
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');
Laravel5.1学习笔记7 视图的更多相关文章
- Django:学习笔记(9)——视图
Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...
- Django:学习笔记(8)——视图
Django:学习笔记(8)——视图
- Oracle 学习笔记 11 -- 视图 (VIEW)
本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...
- iOS学习笔记——滚动视图(scrollView)
滚动视图:在根视图中添加UIScrollViewDelegate协议,声明一些对象属性 @interface BoViewController : UIViewController<UIScro ...
- MySQL学习笔记之视图
视图是对磁盘上保存的表数据的抽象,即抽取一个表或多个表的部分行或列的数据,展示给使用者. 首先列举下MySQL中最简单的对视图操作的语法: 1.创建视图: create view 视图名 as sel ...
- [ios学习笔记之视图、绘制和手势识别]
一 视图 二 绘制 三 手势 00:31 UIGestureRecognizer 抽象类 两步 1添加识别器(控制器或者视图来完成) 2手势识别后要做的事情 UIPanGestureRecognize ...
- sql必知必会(第四版) 学习笔记二 视图
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar ...
- IOS 学习笔记(3) 视图UITabbarController
1.UITabbarViewController标签试图控制器.由于标签页本就起着分类的作用,所以往往呈现的视图内容之间,可以是毫不相关的功能. UITabbarViewController仍然继承自 ...
- IOS 学习笔记(2) 视图UINavigationController
1.栈 导航控制器自身有一个针对显示内容的栈,也有一个对于导航栏的栈,当有新的内容欲显示时,进的导航栏和显示内容会被压入此栈,这样原本显示中的导航栏和显示内容则会进入到栈的更深一层中,根据栈的先进后出 ...
随机推荐
- koji
fedora koji https://koji.fedoraproject.org/koji/ centos cbs.centos.org/koji/
- CF997A Convert to Ones
CF997A Convert to Ones 题目大意: 给你一个长度为 nn 的01串( n $\leq 3*10^5$ ),你有两种操作: 1.将一个子串翻转,花费 XX 2.将一个子串中的0变成 ...
- Luogu P2866 [USACO06NOV]糟糕的一天Bad Hair Day
P2866 [USACO06NOV]糟糕的一天Bad Hair Day 题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a ...
- Python MongoDB 教程
基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...
- R 安装car包失败
在RStudio里安装car包的时候报错 /usr/bin/ld: cannot find -llapack /usr/bin/ld: cannot find -lblas make: *** [qu ...
- <embed> 标签
<embed> 标签定义嵌入的内容,比如插件. <embed quality="high" bgcolor="#FFF" wmode=&quo ...
- python基础综合题----选自python二级考试
<笑傲江湖>是金庸的重要武侠作品之一.这里给出一个<笑傲江湖>的网络版本, 文件名为“笑傲江湖-网络版.txt”. ...
- 洛谷 P1521 求逆序对
题目描述 我们说(i,j)是a1,a2,…,aN的一个逆序对当且仅当i<j且ai>a j.例如2,4,1,3,5的逆序对有3个,分别为(1,3),(2,3),(2,4).现在已知N和K,求 ...
- [bzoj2850]巧克力王国_KD-Tree
巧克力王国 bzoj-2850 题目大意:给出n块巧克力,每块巧克力都有自己的两个参数x和y和本身的价值val,询问:m个人,每个人有两个系数和一个限度a,b,和c.求所有ax+by<=c的巧克 ...
- PHP array_intersect_uassoc()
定义和用法 array_intersect_uassoc() 函数使用用户自定义的回调函数计算数组的交集,用回调函数比较索引. array_intersect_uassoc() 返回一个数组,该数组包 ...