如何为Lithium布局定义自定义处理程序

时间:2013-06-13 02:28:09

标签: php lithium

我希望在布局视图中定义自己的自定义处理程序,就像$this->title()$this->scripts()一样,这样我就可以在视图提供的布局中呈现内容。

准确地说,我想在default.html.php文件中定义的视图的一部分中显示报纸版本的日期。在布局中,我想使用<?= $this->date(); ?>,然后使用类似

的内容

<?= $this->html->date('Jan 1, 2013', ['inline' => false]); ?>

<{1>}文件中的

views/posts/view.html.php类似乎有创建处理程序的方法(例如lithium\template\view\Renderer),但我似乎无法使其像内置处理程序一样工作,如Renderer::applyHandler等。在线文档几乎没有说明在Renderer / View类中自定义处理程序。

2 个答案:

答案 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解决了这个问题 创建自定义帮助下的文档应该足够了。