跟我学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 相关文章推荐
php adodb连接不同数据库
Mar 19 PHP
php SQL之where语句生成器
Mar 24 PHP
php 字符串函数收集
Mar 29 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
PHP常用的排序和查找算法
Aug 06 PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP实现微信公众号验证Token的示例代码
Dec 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
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
浅谈php自定义错误日志
2015/02/13 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
JavaScript入门基础
2015/08/12 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
微信小程序wx.request的简单封装
2019/11/13 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
python切割图片的示例
2020/11/12 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
领导检查欢迎词
2014/01/14 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
2022年四月新番
2022/03/15 日漫
TV动画《间谍过家家》公开PV
2022/03/20 日漫
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS