跟我学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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
PHP7内核之Reference详解
Mar 14 PHP
PHP dirname简单使用代码实例
Nov 13 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输出xml格式字符串(用的这个)
2012/07/12 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
js中的this关键字详解
2013/09/25 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
jquery replace方法去空格
2017/05/08 jQuery
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
numpy中索引和切片详解
2017/12/15 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
合作意向书范本
2014/03/31 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
导师工作推荐信范文
2014/05/17 职场文书
2014年工人工作总结
2014/11/25 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis