Переопределение контроллеров Symfony2

Я использую FOSUserBundle и хочу переопределить его контроллер registerAction. Я прочитал документацию, связанную с переопределением контроллеров FOSUserBundle, но это не работает. Отражая небольшое сообщение в контроллере, оно не печатается в шаблоне.

Вот способ, который я выбрал:

Я наследую свой пакет от FOSUserBundle:

namespace Jheberg\MembersBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class JhebergMembersBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

И я переопределяю registerAction в файле с именем RegistrationController.php в каталоге контроллера моего пакета:

namespace Jheberg\MembersBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;

class RegistrationController extends BaseController
{
    public function registerAction()
    {
        echo 'foo';
        $response = parent::registerAction();

        // do custom stuff

        return $response;
    }
}

У вас есть какое-нибудь решение?


person Jeffrey Muller    schedule 09.04.2012    source источник
comment
так не увидишь, нужно добавить exit or die, т.е. echo 'foo';exit;   -  person Inoryy    schedule 09.04.2012
comment
Это не работает, потому что Symfony вызывает метод registerAction FOSUserBundle, а не мой. Итак, ни echo(), ни exit().   -  person Jeffrey Muller    schedule 09.04.2012
comment
Удалите routing.yml своего пакета (по умолчанию он пуст). Я использовал значение по умолчанию, и Symfony действительно будет читать все из «дочернего» пакета вместо родительского, если он имеет то же имя файла.   -  person Tatsh    schedule 13.01.2016


Ответы (2)


Просто потратил часы, пытаясь заставить это работать, и, наконец, понял это. Часть, которую мне не хватало, заключалась в расширении моего класса User сущностью User из MyUserBundle. Например:

namespace MyNamespace\MyMainBundle\Entity;

use MyNamespace\MyUserBundle\Entity\User as BaseUser;

class User extends BaseUser
{
}

Объект User идентичен объекту в FOSUserBundle (только с другим пространством имен).

namespace MyNamespace\MyUserBundle\Entity;

use FOS\UserBundle\Model\User as AbstractUser;

abstract class User extends AbstractUser
{
}

Если бы я этого не делал, как упомянул Джеффри, MyUserBundle вообще не использовался бы (как будто его не существовало). Теперь все мои переопределенные представления, контроллеры и т. д. используются. Надеюсь это поможет.

person Dally Horton    schedule 23.05.2012

Это не работает для меня. Я пытаюсь сделать ваше решение. Наконец, я просто очищаю кеш, запуская кеш php bin/console: конечно, очищаю внутри моего проекта. И работает как шарм.

Итак... попробуйте очистить кеш.

И извините за мой плохой английский.

person jose    schedule 12.10.2016