跟我学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 相关文章推荐
source.php查看源文件
Dec 09 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php实现统计网站在线人数的方法
May 12 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
Symfony控制层深入详解
Mar 17 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
Yii框架的布局文件实例分析
Sep 04 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分页显示制作详细讲解
2006/10/09 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
历史专业个人求职信分享
2013/12/20 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
小学语文教师研修日志
2015/11/13 职场文书