[转]laravel 4之视图及Responses
Laravel的Responses继承自Symfony\Component\HttpFoundation\Response类,提供了多种方法用于构建HTTP Response。比如View Responses.
视图Views
视图即包含HTML展示界面。Laravel视图通常位于app/views目录中,以.php文件名结尾,比如
<!-- app/views/simple.php --><!doctype html><htmllang="en"><head><metacharset="UTF-8"><title>Views!</title></head><body><p>Oh yeah! VIEWS!</p></body></html>
通过View::make(),很容易在路由中返回
// app/routes.phpRoute::get('/',function(){returnView::make('simple');});
传递数据给视图
// app/routes.phpRoute::get('/{squirrel}',function($squirrel){$data['squirrel']= $squirrel;returnView::make('simple', $data);});
虽然View::make('simple', $data);中传递的是$data,但是视图中并不能使用$data,而是使用的是数组中Key值作为变量名使用,比如数组形式
array('name'=>'Taylor Otwell','status'=>'Code Guru');
在视图中可以访问的是
<?php echo $name;// 值为 'Taylor Otwell' ?><?php echo $status;// 值为 'Code Guru' ?>
因此simple.php中用$squirrel访问
<body><p>I wish I were a <?php echo $squirrel;?> squirrel!</p></body>
还可以以这种形式传递
returnView::make('simple')->with('squirrel','Steve');
在所有视图中同共享同一数据
View::share('name','Steve');
向视图传递子视图
或许你可能想将一个视图放入到另一个视图中。例如,将存放在app/views/child/view.php文件中的子视图传递给另一视图,如下
$view =View::make('greeting')->nest('child','child.view');$view =View::make('greeting')->nest('child','child.view', $data);
在父视图就可以输出该子视图了
<html><body><h1>Hello!</h1><?php echo $child;?></body></html>
视图合成器
视图合成器可以是回调函数或者类方法,它们在创建视图时被调用。如果你想在应用程序中,每次创建视图时都为其绑定一些数据,使用视图合成器可以将代码组织到一个地方。
View::composer('profile',function($view){$view->with('count',User::count());});
每次创建profile视图时,count都会被绑定到视图中。也可以为多个视图同时绑定一个视图合成器
View::composer(array('profile','dashboard'),function($view){$view->with('count',User::count());});
基于类的视图合成器
View::composer('profile','ProfileComposer');//视图合成器类可以任意存放,只要能在composer.json文件中指定位置并自动加载即可classProfileComposer{publicfunction compose($view){$view->with('count',User::count());}}
重定向Redirect
返回一个重定向
returnRedirect::to('user/login');
返回一个重定向至命名路由
returnRedirect::route('login');
返回一个重定向至带有参数的命名路由
returnRedirect::route('profile', array(1));
返回一个重定向至带有命名参数的命名路由
returnRedirect::route('profile', array('user'=>1));
返回一个重定向至控制器Action
returnRedirect::action('HomeController@index');
返回一个重定向至控制器Action并带有参数
returnRedirect::action('UserController@profile', array(1));
返回一个重定向至控制器Action并带有命名参数
returnRedirect::action('UserController@profile', array('user'=>1));
自定义Responses
View跟Redirect都是继承自Response对象,Response对象通常包括body主体,status code状态码,HTTP headersHTTP头部及Cookie等其他有用信息,我们可以自己定义Responses
// app/routes.phpRoute::get('custom/response',function(){$response =Response::make('Hello world!',200);$response->headers->set('our key','our value');return $response;});
Laravel的Response继承自Symfony HTTPFoundation/Response组件,因此基本上HTTPFoundation/Response的API都可以拿来用。
JSON Response
创建一个JSON Response
// app/routes.phpRoute::get('markdown/response',function(){$data = array('iron','man','rocks');returnResponse::json($data);});
文件下载Response
// app/routes.phpRoute::get('file/download',function(){$file ='path_to_my_file.pdf';returnResponse::download($file);});
Response::download()有三个参数可选,第二个参数为状态码,第三个参数为HTTP头部
returnResponse::download($file,418, array('iron','man'));
Blade模版
使用模版可以简化HTML页面编写,避免在HTML中夹杂混乱的PHP语言。Blade模版使用.blade.php为后缀,使用如下语法
变量输出
<p></p>
script脚本
<p>}</p>
结构控制语法
@if($something)<p>Somethingistrue!</p>@else<p>Somethingisfalse!</p>@endif@foreach($manyThings as $thing)<p></p>@endforeach@for ($i = 0; $i < 999; $i++)<p>Even red pandas, aren't enough!</p>@endfor@while(isPretty($kieraKnightly))<p>This loop probably won't ever end.</p>@endwhile
模版继承
<!-- app/views/layouts/base.blade.php --><!doctype html><htmllang="en"><head><metacharset="UTF-8"><title></title>@section('head')<linkrel="stylesheet"href="style.css"/>@section('head')</head><body>@yield('body')</body></html>
@section('head')和@section('head')之间的内容可以被子模版覆盖或继承,使用@parent将继承抚摸版的内容并添加额外信息。子模版如下:
<!-- app/views/home.blade.php -->@extends('layouts.base')@section('head')@parent<linkrel="stylesheet"href="another.css"/>@stop@section('body')<h1>Hurray!</h1><p>We have a template!</p>@stop
编译后HTML文件为
<!doctype html><htmllang="en"><head><metacharset="UTF-8"><title></title><linkrel="stylesheet"href="style.css"/><linkrel="stylesheet"href="another.css"/></head><body><h1>Hurray!</h1><p>We have a template!</p></body></html>
结束
web应用归根结底是一个请求-响应模式,通过分析请求,返回特定的响应,其他所有的逻辑都是基于此展开。
[转]laravel 4之视图及Responses的更多相关文章
- laravel基础课程---8、laravel响应和视图(响应是什么)
laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...
- Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句
Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...
- laravel中的视图合成器
==================================================================================================== ...
- laravel加载视图
1.控制器 2.路由 3.视图
- laravel 向多视图及所有视图传递数据变量
向单个视图传递变量 1.使用with()方法 : view('user.lists')->with('title',$title); 2.直接view()传参: view('user.lists ...
- Laravel控制器和视图
控制器,rawSQL,Model controller.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request ...
- laravel 视图
在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...
- laravel中视图的基本使用(七)
laravel中的视图默认保存在 resources\views 目录下.在控制器中,我们通常使用 view() 方法返回一个视图文件. <?php namespace App\Http\Con ...
- Laravel框架一:原理机制篇
Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点.以下是本人一点粗浅的认识,不敢奢求他人同意,更不能一一而足,仅为自己做一点总结而已. 一. 请求周期 Laravel ...
随机推荐
- UICollectionView的基本使用
这个控件,看起来与UITableView有点像,而且基本的用法也很相像哦!!! 我们来看看API: #pragma mark - UICollectionViewDataSource // 指定Sec ...
- Qt 界面使用自己定义控件 "提升为"
1.效果图 我做了一个很easy的样例,一个能够显示颜色的QLabel,边上有个button,点击,跳出颜色选取的Dialog,然后选择一个颜色.这个QLabel会变成什么颜色. 2.ColorLab ...
- 查看哪些ip破解你ssh密码以及次数
在互联网中,总有一些无聊的人,每天不断的猜解别人服务器的密码!作为linux服务器的管理员,我们应该了解哪些IP经常不断地扫描我们的SSH端口以尝试暴力破解,下面我们用一条命令简单列出哪些IP破解你S ...
- bit、byte、位、字节、字符串等概念
原始文章:http://djt.qq.com/article/view/658 1.古代送信:马车,烽火,信鸽 2.1837年,世界第一条电报诞生, 美国科学家莫尔斯尝试用一些“点”和“划”来表示不同 ...
- (转).net程序员转战android第一篇---环境部署
原文,整个序列一样http://www.cnblogs.com/Twmin/p/3148892.html 对于.net开发人员去写java,可谓说是见山是山, 因为太多的相同; 最近段时间因工作因素, ...
- PowerDesigner Mysql 主键自增、初始值、字符集
自增 在你所要设为自增型的键上(比如你的id)双击,弹出一个Column Properties对话框,右下角有一个Identify的选择框,选中它OK,就可以了. 再去查看Preview,就能看到AU ...
- HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,short col1,int row1,short col2, int row2)
public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int ...
- mysql忘记密码的处理方式(整理非原创)
方案1.通过跳过授权的方式 1.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的中加上:skip-grant-tables . 2.重新启动mysqld # ubun ...
- 基于nginx的rtmp的服务器(nginx-rtmp-module)
一,首先下载安装nginx需要依赖的库文件: 1.1,选定源码目录 选定目录 /usr/local/RTMP cd /usr/local/RTMP 1.2,安装PCRE库 cd /usr/local/ ...
- Js与flash交互:在html页面中用js与MyReport插件交互
Html页面与flash的加载 如下图,flash是html页面的一个插件节点. js与flash进行交互,首先要处理好html页面和swf的加载问题. Swf调用外部js方法,要确保js方法已存在, ...