感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
项目中的模板往往要共享一些常规元素,像是广为人知的头和脚。使用本助手,静态HTML代码可以和“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 创作共用授权。