0

这可以作为普通控制器正常工作:

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() 的声明应该与 ...Bundle/SiteBundle/Controller/DefaultController.php 中的 Symfony\Bundle\FrameworkBundle\Controller\Controller::render() 的声明兼容

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

use Symfony\Component\HttpFoundation\Response 
4

2 回答 2

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);
    }
}
于 2013-04-08T06:23:34.160 回答
1

添加use Symfony\Component\HttpFoundation\Response应该是解决方法,因为目前您实际上正在尝试匹配BundleName\Bundle\SiteBundle\Controller\Response.ControllerExtension::render

你到底在哪里添加这条线?

PS 我建议你每个文件只定义 1 个类

于 2013-04-08T06:16:31.413 回答