这可以作为普通控制器使用:
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
答案 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个类