Slim运用程序将模板的呈现委托给其视图工具。Slim运用程序视图是\Slim\View实现此接口的子类:
<?php
public render(string $template);

视图工具的render方法必须返回其$template参数指定的模板的呈现内容 。
2.Rendering渲染
您可以利用Slim运用程序的render()方法来要求当前视图工具呈现具有给定变量集的模板。Slim运用程序的render()方法将从echo()视图工具返回的输出由输出缓冲区捕获并自动附加到相应工具的主体。这不假设模板的呈现办法; 委托给视图工具的。
<?php
$app = new \Slim\Slim();
$app->get('/books/:id', function ($id) use ($app) {
$app->render('myTemplate.php', array('id' => $id));
});
如果须要将路由回调中的数据通报给视图工具,则必须通过将数组作为Slim运用程序render()方法的第二个参数通报,如下所示:
<?php
$app->render(
'myTemplate.php',
array( 'name' => 'Josh' )
);
您还可以在呈现模板时设置HTTP相应状态:
<?php
$app->render(
'myTemplate.php',
array( 'name' => 'Josh' ),
404
);
3.Custom习气
Slim运用程序将模板的呈现委托给其视图工具。自定义视图是\Slim\View实现此接口的子类:
<?php
public render(string $template);
视图工具的render方法必须返回其$template参数指定的模板的呈现内容 。调用自定义视图的render方法时,会将所需的模板路径名(相对付Slim运用程序的“templates.path”设置)作为其参数通报。这是一个示例自定义视图:
<?php
class CustomView extends \Slim\View
{
public function render($template)
{
return 'The final rendered template';
}
}
自定义视图可以在内部实行任何操作,只要它将模板的渲染输出作为字符串返回即可。自定义视图可以轻松集成盛行的PHP模板系统,如Twig或Smarty。
当心!
自定义视图可以访问Slim运用程序的render()方法通报给它的数据 $this->data。
您可以在GitHub上的Slim-Extras存储库中浏览可与常用PHP模板引擎一起利用的即用型自定义视图。
示例视图
<?php
class CustomView extends \Slim\View
{
public function render($template)
{
// $template === 'show.php'
// $this->data['title'] === 'Sahara'
}
}
示例集成
如果注册的自动加载器无法创造自定义视图,则必须在实例化Slim运用程序之前利用它。
<?php
require 'CustomView.php';
$app = new \Slim\Slim(array(
'view' => new CustomView()
));
$app->get('/books/:id', function ($id) use ($app) {
$app->render('show.php', array('title' => 'Sahara'));
});
$app->run();
4.Data 数据
当心!
您很少直接在视图工具上设置或附加数据。常日,利用Slim运用程序的`render()`方法将数据通报给视图。请拜会渲染模板。
视图工具setData()和appendData()方法将数据注入视图工具; 注入的数据可用于查看模板。视图数据在内部存储为键值数组。
设置数据
视图工具的setData()实例方法将覆盖现有视图数据。您可以利用此方法将单个变量设置为给定值:
<?php
$app->view->setData('color', 'red');
视图的数据现在将包含值为“赤色”的键“颜色”。您还可以利用视图的setData()方法批量分配全体数据数组:
<?php
$app->view->setData(array(
'color' => 'red',
'size' => 'medium'
));
请记住,视图的setData()方法将更换所有以前的数据。
附加数据
视图工具还有一个appendData()方法,可以将数据附加到视图的现有数据。此方法接管一个数组作为其唯一参数:
<?php
$app->view->appendData(array(
'foo' => 'bar'
));