Symfony2:如何更改父渲染变量的值?

时间:2013-05-20 15:22:25

标签: php symfony override parent-child symfony-2.1

我希望有人能帮助我解决这个话题。

我在Symfony 2结构中有两个控制器,第二个控制器覆盖第一个。

这里是父控制器的代码:

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

第二个控制器:

<?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;
   }
}

如您所见,我不知道如何更改$ response值,尤其是“content_area”和“Header_Title”。

感谢。

2 个答案:

答案 0 :(得分:0)

简单的答案是:你不能这样做,因为render方法返回带有准备服务的html的Response对象。换句话说 - 当你从渲染方法中得到你的resopnse时,twig的工作就完成了。

很难说什么是最适合你的解决方案,因为我猜你发布的例子不是真实的,只是简化了。

例如,如果你的两个动作将生成相同的页面,只有标题和页脚差异 - 使用twig的继承而不是控制器继承,并将这些文字放在模板中。

另一方面 - 如果这些东西是由逻辑生成的,使用适当的“逻辑”服务来为它们服务,那么你就不再需要控制器继承了。

如果我的答案对你来说还不够,请详细说明你的目标,我会尽力帮助你。

答案 1 :(得分:0)

您需要在树枝上使用模板继承。

这样,您可以使用扩展控制器所需的标题来定义块。正如塞浦路斯所说,你需要移动这个逻辑