我希望在布局视图中定义自己的自定义处理程序,就像$this->title()
或$this->scripts()
一样,这样我就可以在视图提供的布局中呈现内容。
准确地说,我想在default.html.php
文件中定义的视图的一部分中显示报纸版本的日期。在布局中,我想使用<?= $this->date(); ?>
,然后使用类似
<?= $this->html->date('Jan 1, 2013', ['inline' => false]); ?>
。 views/posts/view.html.php
类似乎有创建处理程序的方法(例如lithium\template\view\Renderer
),但我似乎无法使其像内置处理程序一样工作,如Renderer::applyHandler
等。在线文档几乎没有说明在Renderer / View类中自定义处理程序。
答案 0 :(得分:2)
这可以在不对lithium\template\view\Renderer
类进行子类化的情况下完成。在media.php
引导程序中,使用'handlers'
键和Media::type()
将自定义处理程序传递给渲染器:
Media::type('html', 'text/html', [
'view' => 'lithium\template\View',
'handlers' => ['date' => function($date) use (&$ctx) {
if (!is_null($date)) {
$ctx['date'] = $date;
}
return $ctx['date'];
}]
]);
然后,$this->date()
在视图和布局中变得可用,例如:
//in the default.html.php layout
echo $this->date(); //value passed from /views/controller/index.html.php
//in the views/controller/index.html.php
$this->date(date('Y-m-d'));
作为旁注,$ctx
变量是访问渲染上下文所必需的;请参阅lithium\template\view\Renderer::_init()
方法,了解'handlers'
数组与渲染上下文合并的位置。
答案 1 :(得分:0)
使用helpers解决了这个问题 创建自定义帮助下的文档应该足够了。