如何将参数从动作传递到Symfony中的布局

时间:2009-05-10 02:24:32

标签: php symfony1

全局layout.php文件包含每个页面的标记:

<body> 
    <?php echo $sf_content ?>
</body>

但是对于我网站的所有内部HTML页面,都会将一个类应用于body标签:

 <body class="inner-page"> 
    <?php echo $sf_content ?>
 </body>

如何将类传递给不同模板的布局?

5 个答案:

答案 0 :(得分:4)

你的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')))
?> 

答案 1 :(得分:4)

以下是我与Symfony 1.2 +

一起使用的解决方案

在操作中使用setSlot():

$this->getResponse()->setSlot('home_page', 'yes');

然后在布局中使用get_slot():

<body class="<?php echo has_slot('home_page') ? 'home-page' : 'inner-page' ?>">

答案 2 :(得分:0)

在大多数MVC框架中,您可以像在视图文件中访问变量一样访问布局中的变量。

所以,如果你做了类似$ this-&gt; view-&gt; my_data = 10;在控制中。您可以通过以下方式在布局中访问它: echo $ this-&gt; my_data。

这是伪代码,将其调整为交响乐方式。

答案 3 :(得分:0)

我90%肯定你这样做的方式与普通视图文件中的方式相同。因此,只要您在操作中设置变量,就应该可以从layout.php文件中访问它。

在你的行动中:

$this->body_class = "xxx";

在layout.php中

<body class="<?php echo $body_class?>"> 

请务必执行一些检查以确保设置$ body_class。

答案 4 :(得分:0)

sfConfig :: set('name_here',$ variableHere);
$ variable = sfConfig :: get('name_here');

我经常使用它。在代码的任何地方使用它。