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


Symfony2: How can I change the value of a variable of a parent render?

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

我在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;
   }
}

正如你所看到的,我不知道如何改变$响应值,特别是"content_area"answers"Header_Title"。

谢谢。

简单的答案是:你只是不能这样做,因为渲染方法返回响应对象与准备服务的html。换句话说,当你从渲染方法中得到响应时,树枝的工作就完成了。

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

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

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

如果我的回答对你来说还不够,请告诉我更多你想要达到的目标,我会尽量以更详细的方式帮助你。

你需要在twig中使用模板继承。

这样你就可以用你想要的扩展控制器的标题来定义block。正如cyprian所说,您需要移动这个逻辑