跟我学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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
PHP连接access数据库
Mar 27 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
PHP实现限制IP访问的方法
Apr 20 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
Python标准库与第三方库详解
2014/07/22 Python
python采用getopt解析命令行输入参数实例
2014/09/30 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
Delphi笔试题
2016/11/14 面试题
房屋买卖协议书范本
2014/09/27 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript