跟我学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 程序授权验证开发思路
Jul 09 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
php+laravel 扫码二维码签到功能
May 15 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
用户的详细注册和判断
2006/10/09 PHP
php实现的MySQL通用查询程序
2007/03/11 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python采集博客中上传的QQ截图文件
2014/07/18 Python
分享6个隐藏的python功能
2017/12/07 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
护士检查书
2014/01/17 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python