2013-04-08 3 views
0

Это прекрасно работает как обычный контроллер:Продлить Symfony2 контроллер

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/DefaultCont roller.php

Добавление этого не делает никакой разницы (это исправить, я где-то видел):

use Symfony\Component\HttpFoundation\Response 
+1

я не понимаю, почему переопределенная 'метод render' проще в использовании, чем предыдущий? –

+1

Я не понимаю, почему ему пришлось переопределить его вообще ... – AchrafSoltani

ответ

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); 
    } 
} 
+0

'Ответ' не' Запрос' :) – Inoryy

+0

@ Инори спасибо, исправлено. –

+0

Спасибо. Он работает сейчас. Кроме того, возможно, что часть расширения запускается для «каждого» контроллера. Очевидно, мне нужно вытащить его из файла контроллера. Я пробовал называть его сервисом, но не могу заставить его работать. Я не думаю, что включение этого в каждый контроллер - хорошая идея. – user2143356

1

Добавление use Symfony\Component\HttpFoundation\Response должно быть исправление, поскольку в настоящее время вы на самом деле пытаетесь соответствовать BundleName\Bundle\SiteBundle\Controller\Response в ControllerExtension::render.

Где именно вы добавляете линию?

P.S. Я рекомендую вам определить только 1 класс в файле

+0

Спасибо. Однако это не работает. Я попробовал это снова сейчас (добавил его под другими заявлениями использования). Два класса в файле - это просто для демонстрационных целей. Должно быть решение этого - оно должно быть простым. – user2143356

Смежные вопросы