跟我学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
phpfans留言版用到的install.php
Jan 04 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
PHP随机数 C扩展随机数
May 04 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 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 session
2013/10/28 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
实例介绍Python中整型
2019/02/11 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
pow在python中的含义及用法
2019/07/11 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
django配置app中的静态文件步骤
2020/03/27 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python不同系统中打开方法
2020/06/23 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
python二维图制作的实例代码
2020/12/03 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
学生的自我鉴定范文
2013/10/24 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
写求职信有什么意义
2014/02/17 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
妇女工作先进事迹
2014/08/17 职场文书
总经理岗位职责
2015/02/04 职场文书
大学学生会辞职信
2015/05/13 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python