跟我学Laravel之视图 & Response


Posted in PHP onOctober 15, 2014

基本Response

从路由中返回字符串

Route::get('/', function()

{

    return 'Hello World';

});

创建自定义Response

Response类继承自Symfony\Component\HttpFoundation\Response类,提供了多种方法用于构建HTTP Response。

$response = Response::make($contents, $statusCode);
$response->header('Content-Type', $value);
return $response;

如果需要访问 Response 类的方法,但又要返回一个视图作为响应的内容,通过使用 Response::view 方法可以很容易实现:

return Response::view('hello')->header('Content-Type', $type);

在Response中添加Cookie

$cookie = Cookie::make('name', 'value');
return Response::make($content)->withCookie($cookie);

重定向

返回一个重定向

return Redirect::to('user/login');
返回一个带有数据的重定向

return Redirect::to('user/login')->with('message', 'Login Failed');
注意: with 方法将数据写到了Session中,通过Session::get 方法即可获取该数据。
返回一个重定向至命名路由

return Redirect::route('login');
返回一个重定向至带有参数的命名路由

return Redirect::route('profile', array(1));
返回一个重定向至带有命名参数的命名路由

return Redirect::route('profile', array('user' => 1));
返回一个重定向至控制器Action

return Redirect::action('HomeController@index');
返回一个重定向至控制器Action并带有参数

return Redirect::action('UserController@profile', array(1));
返回一个重定向至控制器Action并带有命名参数

return Redirect::action('UserController@profile', array('user' => 1));

视图

视图通常包含应用中的HTML代码,为分离表现层与控制器和业务逻辑提供了便利。视图存放于app/views目录。

一个简单视图案例:

<!-- View stored in app/views/greeting.php -->
<html>

    <body>

        <h1>Hello, <?php echo $name; ?></h1>

    </body>

</html>

通过如下方法来返回该视图到浏览器:

Route::get('/', function()

{

    return View::make('greeting', array('name' => 'Taylor'));

});

传递给View::make方法的第二个参数是一个数组,它将被传递给视图。

传递数据给视图

// Using conventional approach

$view = View::make('greeting')->with('name', 'Steve');
// Using Magic Methods

$view = View::make('greeting')->withName('steve');

在上面的案例中,$name变量在视图内是可以访问的,其值为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());

});

如果你更喜欢使用基于类的视图合成器,IoC container可以提供更多便利,如下所示:

View::composer('profile', 'ProfileComposer');

视图合成器类定义如下:

class ProfileComposer {
    public function compose($view)

    {

        $view->with('count', User::count());

    }
}

注意,没有规定视图合成器类存放在哪里。因此,你可以任意存放,只要能在composer.json文件中指定位置并自动加载即可。

视图创建器

视图 创建器 与视图合成器的工作方式几乎完全相同;区别在于当一个视图被实例化后就会立即触发视图创建器。视图创建器通过 creator 方法方便地定义:

View::creator('profile', function($view)

{

    $view->with('count', User::count());

});

特殊Response

创建一个JSON Response

return Response::json(array('name' => 'Steve', 'state' => 'CA'));
创建一个JSONP Response

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
创建一个文件下载Response

return Response::download($pathToFile);

return Response::download($pathToFile, $status, $headers);
注意: Symfony HttpFoundation 用于处理文件下载,要求下载的文件的文件名只包含 ASCII 字符。

Response 宏

如果希望自定义一个 response ,以便在你应用程序中的许多路由和控制器中进行重用,可以使用 Response::macro 方法:

Response::macro('caps', function($value)

{

    return Response::make(strtoupper($value));

});

macro 方法接受两个参数,一个指定和名称和一个闭包。当通过 Response 类调用该名称的宏时,闭包就会被执行:

return Response::caps('foo');
你可以在 app/start 目录里的文件中定义宏。或者,你也可以通过一个单独的文件组织你的宏,并将该文件包含至某个 start 文件中。

PHP 相关文章推荐
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
PHP goto语句用法实例
Aug 06 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
跟我学Laravel之请求与输入
Oct 15 #PHP
跟我学Laravel之路由
Oct 15 #PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 #PHP
跟我学Laravel之配置Laravel
Oct 15 #PHP
跟我学Laravel之安装Laravel
Oct 15 #PHP
跟我学Laravel之快速入门
Oct 15 #PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 #PHP
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
基于php判断客户端类型
2016/10/14 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
面包屑导航详解
2017/12/07 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
Python字符串切片操作知识详解
2016/03/28 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python微信公众号开发简单流程实现
2020/03/09 Python
python 读取.nii格式图像实例
2020/07/01 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Python读写锁实现实现代码解析
2020/11/28 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
英语专业毕业个人求职自荐信
2013/09/21 职场文书
标准导师推荐信(医学类)
2013/10/28 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
《秋游》教学反思
2014/04/24 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
简单租房协议书
2014/10/21 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
导游词之岳阳楼
2019/09/25 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS