Slots Helper

3.4 版本
维护中的版本

项目中的模板往往要共享一些常规元素,像是广为人知的头和脚。使用本助手,静态HTML代码可以和“slots”(槽位)一起被置于一个布局文件中,用于呈现页面中将会发生改变的动态内容。这些slots,常被不同的子模板所填充。换言之,布局文件装饰了子模板。

显示Slots 

slots的访问要通过slots helper ($view['slots']) 进行。使用 output() 来在那个地方显示slot的内容:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- views/layout.php -->
<!doctype html>
<html>
    <head>
        <title>
            <?php $view['slots']->output('title', 'Default title') ?>
        </title>
    </head>
    <body>
        <?php $view['slots']->output('_content') ?>
    </body>
</html>

方法中的第一个参数是slot的名称。output方法有一个可选的第二参数,是当slot不可用时的默认值。

_content slot是一个由 PhpEngine 设置的特殊的slot。包含了子模板的内容。

如果你用的是独立组件,确保已经注册了SlotsHelper

1
2
3
4
use Symfony\Component\Templating\Helper\SlotsHelper;
 
// ...
$templateEngine->set(new SlotsHelper());

扩展模板 

extend() 方法在子模板中被调用以设置其父模板。然后 $view['slots']->set() 可以用于设置一个slot的内容。所有未在slot中显式进行设置的内容都在 _content slot里。

1
2
3
4
5
6
7
8
9
10
11
<!-- views/page.php -->
<?php $view->extend('layout.php') ?>
 
<?php $view['slots']->set('title', $page->title) ?>
 
<h1>
    <?php echo $page->title ?>
</h1>
<p>
    <?php echo $page->body ?>
</p>

多级继承是可以的:一个布局可以继承另一个布局。

对于大型slot,还有一个扩展了的语法:

1
2
3
<?php $view['slots']->start('title') ?>
    Some large amount of HTML
<?php $view['slots']->stop() ?>

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)