跟我学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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
Destoon模板制作简明教程
Jun 20 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
php实现utf-8转unicode函数分享
2015/01/06 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
PHP7变量处理机制修改
2021/03/09 PHP
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
Python的Django框架中的Context使用
2015/07/15 Python
Python实现文件复制删除
2016/04/19 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
Python简单的制作图片验证码实例
2017/05/31 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
对python的输出和输出格式详解
2018/12/08 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
简单了解django缓存方式及配置
2019/07/19 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
出国留学介绍信
2014/01/13 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android