跟我学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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
PHP获取文件行数的方法
Jun 10 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
PHP命名空间简单用法示例
Dec 28 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
PHP解决高并发问题
Apr 01 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递归方法实现无限分类实例代码
2014/02/28 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
js chrome浏览器判断代码
2010/03/28 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
运动会稿件100字
2014/02/21 职场文书
高考标语大全
2014/06/05 职场文书
保护环境标语
2014/06/09 职场文书
经典毕业生求职信
2014/07/12 职场文书
总结Python常用的魔法方法
2021/05/25 Python
nginx 添加http_stub_status_module模块
2022/05/25 Servers