2010-11-22 3 views
2

Je construis une application simple en utilisant Symfony. La mise en page consiste en un corps principal avec des barres latérales gauche et droite. Les barres latérales contiennent plusieurs modules configurables par l'utilisateur.Comment remplir le contenu de la barre latérale dans une mise en page symfony?

Symfony fournit des fentes qui semblent être la bonne façon de remplir les barres latérales:

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> 

Pour remplir les fentes j'ai essayé d'utiliser un filtre. Le problème est que certains modules dans les sidebars dépendent de ce qui se passe dans les actions (mises à jour de catégorie, etc.). Ils doivent donc être générés après l'exécution de l'action.

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();   
    } 
} 

Je ne veux pas ajouter un appel "run sidebar" à chaque action comme cela semble inflexible.

Quel est le meilleur point dans le flux d'événements Symfony pour générer le contenu de la barre latérale? Y a-t-il un événement approprié auquel je peux me connecter?

Répondre

3

Vous pouvez utiliser un composant? Ce qui est fondamentalement une fente avec une sorte d'action attachée à elle. Dans votre action, vous pouvez faire ce que votre logique a besoin et le rendre de la même manière que ci-dessus, mais avec plus de logique.

De l'manual:

Un composant est comme une action, à l'exception il est beaucoup plus rapide. La logique d'un composant est conservée dans une classe héritant de sfComponents, située dans un fichier actions/components.class.php . Sa présentation est conservée dans un partiel. Méthodes de sfComponents début du cours avec le mot exécuter, comme les actions, et ils peuvent passer variables à leur présentation contrepartie de la même manière que les actions peuvent passer des variables.

+0

Merci pour la réponse. J'avais rejeté des composants plus tôt, et ils ne sont pas tout à fait adaptés à mon objectif. Mais votre commentaire a obligé à repenser ma stratégie et une nouvelle voie à suivre. – Tramov

Questions connexes