全局 layout.php 文件包含每个页面的标签:
<body>
<?php echo $sf_content ?>
</body>
但是对于我网站的所有内部 HTML 页面,将一个类应用于 body 标记:
<body class="inner-page">
<?php echo $sf_content ?>
</body>
如何将一个类从不同的模板传递给布局?
在你的 layout.php
<body <?php if (!include_slot('body_id')): ?>id="default"<?php endif; ?>>
在您的模板中:
<?php slot('body_id') ?>id="bla"<?php end_slot(); ?>
或者
<?php slot(
'body_id',
sprintf('id="%s"', $sf_params->get('module')))
?>
这是我在 Symfony 1.2+ 中使用的解决方案
在操作中使用 setSlot():
$this->getResponse()->setSlot('home_page', 'yes');
然后在布局中使用 get_slot() :
<body class="<?php echo has_slot('home_page') ? 'home-page' : 'inner-page' ?>">
在大多数 MVC 框架中,您在布局中访问变量的方式与在视图文件中访问变量的方式相同。
所以,如果你做了类似 $this->view->my_data=10; 在控制中。您可以通过以下方式在布局中访问它:echo $this->my_data。
这是伪代码,将其调整为交响乐方式。
我 90% 确定您执行此操作的方式与从常规视图文件中执行此操作的方式相同。因此,只要您在操作中设置变量,就应该可以从 layout.php 文件中访问它。
在你的行动中:
$this->body_class = "xxx";
在 layout.php 中
<body class="<?php echo $body_class?>">
请务必运行一些检查以确保 $body_class 已设置。
sfConfig::set('name_here', $variableHere);
$variable = sfConfig::get('name_here');
我经常使用这个。在代码的任何地方使用它。