跟我学Laravel之视图 & Response(2)
<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实现采集中国天气网未来7天天气
- 下一篇:跟我学Laravel之请求与输入