扩展Symfony2控制器

时间:2013-04-08 05:34:47

标签: symfony

这可以作为普通控制器使用:

namespace BundleName\Bundle\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction()
    {

        return $this->render('MyBundle:Default:index.html.twig', array("abc" => "test"));

    }

}

...通过这样做,它应该只是扩展控制器:

namespace BundleName\Bundle\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class ControllerExtension extends Controller
{
    public function render(string $view, array $parameters = array(), Response $response = null)
    {

        return parent::render($view, $parameters, $response);

    }

}

class DefaultController extends ControllerExtension
{
    public function indexAction()
    {

        return $this->render('MyBundle:Default:index.html.twig', array("abc" => "test"));

    }

}

..但是我收到了这个错误:

运行时注意:声明... ControllerExtension :: render()应该与Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller :: render()的声明兼容... Bundle / SiteBundle / Controller / DefaultController.php

添加这个没有区别(这是我在某处看到的修复):

use Symfony\Component\HttpFoundation\Response 

2 个答案:

答案 0 :(得分:6)

PHP是一种懒惰的语言。你不能输入提示字符串,整数或布尔值,只能输入数组和类名。

因此,为了获得一个正常工作的函数并更正PHP,你应该这样做:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response; //! important as @Inori said

class ControllerExtension extends Controller
{
    public function render($view, array $parameters = array(), Response $response = null)
    {
        return parent::render($view, $parameters, $response);
    }
}

答案 1 :(得分:1)

添加use Symfony\Component\HttpFoundation\Response应该是修复,因为目前您实际上正在尝试匹配BundleName\Bundle\SiteBundle\Controller\Response中的ControllerExtension::render

你究竟在哪里添加这条线?

P.S。我建议你只为每个文件定义1个类