2010-11-22 87 views
2

我正在使用Symfony构建一个简单的应用程序。页面布局由一个带有左右侧栏的主体组成。侧边栏包含用户可配置的几个模块。如何在symfony布局中填充侧边栏内容?

symfony提供了这似乎是填充侧栏的正确方法插槽:

layout.php中

<div id="left_sidebar"> 
<?php if (has_slot('left_sidebar')): ?> 
<ul> 
    <?php include_slot('left_sidebar') ?> 
</ul> 
<?php else: ?> 
    <!-- default sidebar code --> 
<?php endif; ?> 
</div> 

为了填补我使用滤波器试图槽。问题是,侧边栏中的一些模块取决于动作(类别更新等)中发生的情况。所以他们应该在动作完成后生成。

msBootstrapFilter

class msBootstrapFilter extends sfFilter 
{ 

    public function execute($filterChain) 
    { 
     // Generating the sidebars at this point is TOO early 
     // as the content of some sidebars depends on the actions 

    // Execute next filter 
    $filterChain->execute(); 

    // Generate the sidebars after running through all the code 
     // This is TOO LATE, the layout has been rendered 

    $this->generateSidebars();   
    } 
} 

我不想一个“跑栏”呼叫添加到每个行动似乎缺乏灵活性。

Symfony事件流中生成边栏内容的最佳点是什么?是否有适合的活动可以连接到?

回答

3

您可以使用组件吗?这基本上是一个附有某种动作的插槽。在你的行为中,你可以做任何你的逻辑需求,并按照上述相同的方式呈现它,但具有更多的逻辑。

manual

的组件就像是一个动作,除了 它的速度更快。 组件的逻辑被保存在继承自sfComponents的类 中,其位于 位于actions/components.class.php 文件中。其演示文稿保存在 部分。方法的类组件开始时执行字 就像动作一样,并且它们可以通过 变量传递给它们的演示文稿 对应方式与 动作可以传递变量的方式相同。

+0

谢谢你的回应。我早些时候解雇了组件,它们不太适合我的目的。但是你的评论迫使我重新思考我的策略和追求的新路径。 – Tramov 2010-11-22 15:40:21