2013-05-20 3 views
2

J'espère que quelqu'un peut m'aider avec ce sujet.Symfony2: Comment puis-je changer la valeur d'une variable d'un rendu parent?

J'ai deux contrôleurs dans une structure Symfony 2, le second remplace le premier.

Voici le code du contrôleur parent:

<?php 

namespace WebSender\MainPageBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class DefaultController extends Controller 
{ 
    public function indexAction() 
    { 
     $Header_Title = "Titolo 1"; 
     $content_area = "Contenuto di prova 1!"; 
     $Header_Welcome = "Benvenuto utente: "; 
     $username = "nome utente"; 
     $Header_Logout = "Logout"; 

     return $this->render('WebSenderMainPageBundle:Default:index.html.php', array('Header_Title' => $Header_Title, 'content_area' => $content_area, 'Header_Welcome' => $Header_Welcome, 'username' => $username, 'Header_Logout' => $Header_Logout)); 
    } 
} 

Et le second contrôleur:

<?php 

namespace WebSender\MainPageBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Response; 

use WebSender\MainPageBundle\Controller\DefaultController as BaseController; 

class GridController extends BaseController 
{ 
    public function indexAction() 
    { 

     $Header_Title = "Titolo 2"; 
     $content_area = "Contenuto di prova 2!"; 

     $response = parent::indexAction(); 

     // return $this->render('WebSenderMainPageBundle:Default:index.html.php', array('Header_Title' => $Header_Title, 'content_area' => $content_area, 'Header_Welcome' => $Header_Welcome, 'username' => $username, 'Header_Logout' => $Header_Logout)); 
     return $response; 
    } 
} 

Comme vous pouvez le voir, je ne sais pas comment changer $ valeurs de réponse, en particulier " content_area "et" Header_Title ".

Merci.

+0

Dans Symfony, vous pouvez remplacer un contrôleur par un nouveau: en d'autres termes, vous "étendez" tout ou partie du contrôleur avec un autre. –

Répondre

0

La réponse simple est: vous ne pouvez pas le faire car la méthode render renvoie l'objet Response avec le code HTML prêt à l'emploi. En d'autres termes, lorsque vous obtenez votre resopnse à partir de la méthode render, le travail du twig est terminé.

Il est difficile de dire quelle sera la meilleure solution pour vous, parce que je suppose que l'exemple que vous avez posté n'est pas réel, mais simplement simplifié. Par exemple, si vos deux actions génèrent la même page, avec uniquement des différences de titre et de pied de page, utilisez l'héritage de twig au lieu de l'héritage du contrôleur et placez ces littéraux dans les modèles. D'autre part, si ces choses sont générées par la logique, utilisez le service "logique" approprié pour les servir, et vous n'avez plus besoin de l'héritage du contrôleur.

Si ma réponse ne vous suffit pas, veuillez en dire plus sur ce que vous tentez d'accomplir et je vais essayer de vous aider de manière plus détaillée.

+0

Merci pour l'explication, je pense que je vais "repenser" la logique: j'essayais de "forcer" la création logique des variables. Merci encore. –

0

Vous devez utiliser l'héritage de modèle avec twig.

De cette façon, vous définissez un bloc avec le titre que vous voulez pour le contrôleur étendu. Comme l'a dit cyprien, vous devez déplacer cette logique

+0

Merci, je vais essayer. –

Questions connexes