我希望有人能帮助我解决这个话题。
我在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”。
感谢。
答案 0 :(得分:0)
简单的答案是:你不能这样做,因为render方法返回带有准备服务的html的Response对象。换句话说 - 当你从渲染方法中得到你的resopnse时,twig的工作就完成了。
很难说什么是最适合你的解决方案,因为我猜你发布的例子不是真实的,只是简化了。
例如,如果你的两个动作将生成相同的页面,只有标题和页脚差异 - 使用twig的继承而不是控制器继承,并将这些文字放在模板中。
另一方面 - 如果这些东西是由逻辑生成的,使用适当的“逻辑”服务来为它们服务,那么你就不再需要控制器继承了。
如果我的答案对你来说还不够,请详细说明你的目标,我会尽力帮助你。
答案 1 :(得分:0)
您需要在树枝上使用模板继承。
这样,您可以使用扩展控制器所需的标题来定义块。正如塞浦路斯所说,你需要移动这个逻辑