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.php
Route::get('/',function()
{
returnView::make('simple');
});
传递数据给视图
// app/routes.php
Route::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 headers
HTTP头部及Cookie等其他有用信息,我们可以自己定义Responses
// app/routes.php
Route::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.php
Route::get('markdown/response',function()
{
$data = array('iron','man','rocks');
returnResponse::json($data);
});
文件下载Response
// app/routes.php
Route::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 ...
随机推荐
-
WDCP突破phpmyadmin导入文件时只有20M
WDCP在默认的配置下,PHPMYADMIN的上传上限是20M,很多时候我们的数据库大小已经大于了20M了,那这时候改怎么办呢?下面就用简单的话,告诉大家如何解决这一个问题.方法: 登录到WDCP的后 ...
-
$(&#39;div&#39;,&#39;li&#39;),$(&#39;div , li&#39;),$(&#39;div li&#39;)的区别
要搞清楚$('div','li') 和 $('div , li') 和 $('div li') 区别: $('div','li'):是$(子,父),是从父节点里找子,而不是找li外面的div $('d ...
-
Python脚本控制的WebDriver 常用操作 <;十>; 层级定位
下面将使用WebDriver来模拟操作一个层级定位元素的操作 测试用例场景 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所 ...
-
嵌入式开发之NorFlash 和NandFlash
http://blog.csdn.net/tigerjibo/article/details/9322035 [摘要]:作为一个嵌入式工程师,要对NorFlash 和NandFlash要有最起码的认知 ...
-
Android 透明Button
1.是制作9-patch的图片,这样能够匹配文字内容的长短. 2.是指定按钮样式背景,即定制drawable的xml文件,这样做的好处不用图片做背景,节省空间. 定制透明样式的按钮.直接看代码: dr ...
-
u-boot移植(十)---代码修改---支持nor flash
一.问题定位 开发板重启后打印了2个提醒和一个错误,caches的提醒先不看,看看flash和nand下面的提醒,bad CRC,Using default enviroment,我们可以定位Usin ...
-
基于ZooKeeper和Thrift构建动态RPC调用
一.基本功能 实现服务端向ZooKeeper集群注册自己提供的服务,并且把自己的IP地址和服务端口创建到具体的服务目录下.客户端向ZooKeeper集群监听自己关注的RPC服务(例如:sayHello ...
-
tp5中ajax方式提交表单
用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. <!DOCTYPE html> <html lang="en"> <head> < ...
-
swift实现label换行
so easy 换行的实质为在字符串中添加"\n" so, understand???
-
解决Android NDK 报jxxx编译找不到
如题 解决: 引入NDK对应的arm或者x86库 如果你用的是GinyMotion模拟器,那就引入x86库 不多说了,见截图 1.选择Propertities->C/C++ General-&g ...