跟我学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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 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
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
Python continue语句用法实例
2014/03/11 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
详解python的ORM中Pony用法
2018/02/09 Python
python使用udp实现聊天器功能
2018/12/10 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
python添加菜单图文讲解
2019/06/04 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python利用tkinter实现屏保
2019/07/30 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
python实现学生管理系统开发
2020/07/24 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
财务会计大学生自我评价
2014/04/09 职场文书
学校安全防火方案
2014/06/07 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书