laravel 4之视图及Responses
16 Aug 2013

Laravel的Responses继承自Symfony\Component\HttpFoundation\Response类,提供了多种方法用于构建HTTP Response。比如View Responses.

视图Views

视图即包含HTML展示界面。Laravel视图通常位于app/views目录中,以.php文件名结尾,比如

  1. <!-- app/views/simple.php -->
  2. <!doctype html>
  3. <htmllang="en">
  4. <head>
  5. <metacharset="UTF-8">
  6. <title>Views!</title>
  7. </head>
  8. <body>
  9. <p>Oh yeah! VIEWS!</p>
  10. </body>
  11. </html>

通过View::make(),很容易在路由中返回

  1. // app/routes.php
  2. Route::get('/',function()
  3. {
  4. returnView::make('simple');
  5. });

传递数据给视图

  1. // app/routes.php
  2. Route::get('/{squirrel}',function($squirrel)
  3. {
  4. $data['squirrel']= $squirrel;
  5. returnView::make('simple', $data);
  6. });

虽然View::make('simple', $data);中传递的是$data,但是视图中并不能使用$data,而是使用的是数组中Key值作为变量名使用,比如数组形式

  1. array('name'=>'Taylor Otwell','status'=>'Code Guru');

在视图中可以访问的是

  1. <?php echo $name;// 值为 'Taylor Otwell' ?>
  2. <?php echo $status;// 值为 'Code Guru' ?>

因此simple.php中用$squirrel访问

  1. <body>
  2. <p>I wish I were a <?php echo $squirrel;?> squirrel!</p>
  3. </body>

还可以以这种形式传递

  1. returnView::make('simple')->with('squirrel','Steve');

在所有视图中同共享同一数据

  1. View::share('name','Steve');

向视图传递子视图

或许你可能想将一个视图放入到另一个视图中。例如,将存放在app/views/child/view.php文件中的子视图传递给另一视图,如下

  1. $view =View::make('greeting')->nest('child','child.view');
  2. $view =View::make('greeting')->nest('child','child.view', $data);

在父视图就可以输出该子视图了

  1. <html>
  2. <body>
  3. <h1>Hello!</h1>
  4. <?php echo $child;?>
  5. </body>
  6. </html>

视图合成器

视图合成器可以是回调函数或者类方法,它们在创建视图时被调用。如果你想在应用程序中,每次创建视图时都为其绑定一些数据,使用视图合成器可以将代码组织到一个地方。

  1. View::composer('profile',function($view)
  2. {
  3. $view->with('count',User::count());
  4. });

每次创建profile视图时,count都会被绑定到视图中。也可以为多个视图同时绑定一个视图合成器

  1. View::composer(array('profile','dashboard'),function($view)
  2. {
  3. $view->with('count',User::count());
  4. });

基于类的视图合成器

  1. View::composer('profile','ProfileComposer');
  2. //视图合成器类可以任意存放,只要能在composer.json文件中指定位置并自动加载即可
  3. classProfileComposer{
  4. publicfunction compose($view)
  5. {
  6. $view->with('count',User::count());
  7. }
  8. }

重定向Redirect

返回一个重定向

  1. returnRedirect::to('user/login');

返回一个重定向至命名路由

  1. returnRedirect::route('login');

返回一个重定向至带有参数的命名路由

  1. returnRedirect::route('profile', array(1));

返回一个重定向至带有命名参数的命名路由

  1. returnRedirect::route('profile', array('user'=>1));

返回一个重定向至控制器Action

  1. returnRedirect::action('HomeController@index');

返回一个重定向至控制器Action并带有参数

  1. returnRedirect::action('UserController@profile', array(1));

返回一个重定向至控制器Action并带有命名参数

  1. returnRedirect::action('UserController@profile', array('user'=>1));

自定义Responses

ViewRedirect都是继承自Response对象,Response对象通常包括body主体,status code状态码,HTTP headersHTTP头部及Cookie等其他有用信息,我们可以自己定义Responses

  1. // app/routes.php
  2. Route::get('custom/response',function()
  3. {
  4. $response =Response::make('Hello world!',200);
  5. $response->headers->set('our key','our value');
  6. return $response;
  7. });

Laravel的Response继承自Symfony HTTPFoundation/Response组件,因此基本上HTTPFoundation/Response的API都可以拿来用。

JSON Response

创建一个JSON Response

  1. // app/routes.php
  2. Route::get('markdown/response',function()
  3. {
  4. $data = array('iron','man','rocks');
  5. returnResponse::json($data);
  6. });

文件下载Response

  1. // app/routes.php
  2. Route::get('file/download',function()
  3. {
  4. $file ='path_to_my_file.pdf';
  5. returnResponse::download($file);
  6. });

Response::download()有三个参数可选,第二个参数为状态码,第三个参数为HTTP头部

  1. returnResponse::download($file,418, array('iron','man'));

Blade模版

使用模版可以简化HTML页面编写,避免在HTML中夹杂混乱的PHP语言。Blade模版使用.blade.php为后缀,使用如下语法

变量输出

  1. <p></p>

script脚本

  1. <p>}</p>

结构控制语法

  1. @if($something)
  2. <p>Somethingistrue!</p>
  3. @else
  4. <p>Somethingisfalse!</p>
  5. @endif
  6. @foreach($manyThings as $thing)
  7. <p></p>
  8. @endforeach
  9. @for ($i = 0; $i < 999; $i++)
  10. <p>Even red pandas, aren't enough!</p>
  11. @endfor
  12. @while(isPretty($kieraKnightly))
  13. <p>This loop probably won't ever end.</p>
  14. @endwhile

模版继承

  1. <!-- app/views/layouts/base.blade.php -->
  2. <!doctype html>
  3. <htmllang="en">
  4. <head>
  5. <metacharset="UTF-8">
  6. <title></title>
  7. @section('head')
  8. <linkrel="stylesheet"href="style.css"/>
  9. @section('head')
  10. </head>
  11. <body>
  12. @yield('body')
  13. </body>
  14. </html>

@section('head')@section('head')之间的内容可以被子模版覆盖或继承,使用@parent将继承抚摸版的内容并添加额外信息。子模版如下:

  1. <!-- app/views/home.blade.php -->
  2. @extends('layouts.base')
  3. @section('head')
  4. @parent
  5. <linkrel="stylesheet"href="another.css"/>
  6. @stop
  7. @section('body')
  8. <h1>Hurray!</h1>
  9. <p>We have a template!</p>
  10. @stop

编译后HTML文件为

  1. <!doctype html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title></title>
  6. <linkrel="stylesheet"href="style.css"/>
  7. <linkrel="stylesheet"href="another.css"/>
  8. </head>
  9. <body>
  10. <h1>Hurray!</h1>
  11. <p>We have a template!</p>
  12. </body>
  13. </html>

结束

web应用归根结底是一个请求-响应模式,通过分析请求,返回特定的响应,其他所有的逻辑都是基于此展开。

[转]laravel 4之视图及Responses的更多相关文章

  1. laravel基础课程---8、laravel响应和视图(响应是什么)

    laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...

  2. Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句

    Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...

  3. laravel中的视图合成器

    ==================================================================================================== ...

  4. laravel加载视图

    1.控制器 2.路由 3.视图

  5. laravel 向多视图及所有视图传递数据变量

    向单个视图传递变量 1.使用with()方法 : view('user.lists')->with('title',$title); 2.直接view()传参: view('user.lists ...

  6. Laravel控制器和视图

    控制器,rawSQL,Model controller.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request ...

  7. laravel 视图

    在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...

  8. laravel中视图的基本使用(七)

    laravel中的视图默认保存在 resources\views 目录下.在控制器中,我们通常使用 view() 方法返回一个视图文件. <?php namespace App\Http\Con ...

  9. Laravel框架一:原理机制篇

    Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点.以下是本人一点粗浅的认识,不敢奢求他人同意,更不能一一而足,仅为自己做一点总结而已. 一. 请求周期 Laravel ...

随机推荐

  1. js将日期格式的时候转换成时间搓

    自己写的一个方法 function split_time(time){//将当前时间转换成时间搓  例如2013-09-11 12:12:12   var arr=time.split(" ...

  2. Windows下命令行直接编译程序

    D:\> cl hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Cop ...

  3. [AngularJS] Transforming raw JSON data to meaningful output in AngularJS

    angular.module('APP', []) .controller('MainController', function($scope, UserConstants){ var user = ...

  4. 安装MySQL和Navicat,并与MyEclipse连接

    1.下载安装MySQL 1)到http://dev.mysql.com/downloads/下载MySQL社区版Server,和用于JDBC的Connector.一路默认安装就可以,须要注意的是记住M ...

  5. VS2010使用附加进程的方式调试IIS中的页面介绍

    1.       对要测试的页面设置断点,然后选择”调试”->”附加到进程”,在进程中选择w3wp.exe进程(需要先打开需测试的页面) 2.       配置完成,当打开你需要测试的页面的时候 ...

  6. 网站发布在另外一个网站下面配置伪静态之后图片样式和JS丢失

    <script src="<%=ResolveClientUrl("~/content/js/jquery-1.7.1.min.js") %>" ...

  7. 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  8. HDU 4268 Alice and Bob set用法

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4268 贪心思想,用set实现平衡树,但是set有唯一性,所以要用 multiset AC代码: #i ...

  9. 制作 leanote docker 镜像

    leanote 使用 mongodb 存储数据,如果把 mongodb 单独做成一个镜像,初始化数据时比较麻烦,所以最后还是决定把 mongodb 和 leanote 放到同一个镜像里边. docke ...

  10. uva201 Squares

     Squares  A children's board game consists of a square array of dots that contains lines connecting ...