Я хотел бы иметь возможность добавить хранилище в форму регистрации (аналогично этот подход) использовать в слушателе событий, но я получаю:
Исправляемая фатальная ошибка: аргумент 1, передаваемый в AppBundle \ Form \ RegistrationType :: __ construct (), должен> быть экземпляром AppBundle \ Entity \ FocusRepository, заданная строка вызывается в G: \ Documents \ workspace> \ match \ vendor \ pugx \ multi -user-bundle \ PUGX \ MultiUserBundle \ Model \ UserDiscriminator.php в строке 155
Я могу обойти это в шаблоне, но использование прослушивателя событий показалось более элегантным решением. Какие-либо предложения?
namespace AppBundle\Form;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use FOS\UserBundle\Form\Type\RegistrationFormType;
use AppBundle\Entity\FocusRepository;
class RegistrationType extends RegistrationFormType
{
private $focusRepo;
public function __construct(FocusRepository $focusRepo)
{
$this->focusRepo = $focusRepo;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
...
}
...
}
services:
app.focus_repository:
class: Doctrine\ORM\EntityRepository
factory_service: doctrine.orm.default_entity_manager
factory_method: getRepository
arguments:
- AppBundle\Entity\Focus
Ошибка возникает из-за того, что PUGXMultiUserBundle использует регистрационные (и профильные) формы FOSUserBundle. У этих форм уже есть строка (указывающая класс User) в конструкторе. Я отказался от этого вопроса и использую другой подход. Но теперь я знаю, что, возможно, я мог бы использовать проход компилятора, чтобы переопределить службу формы регистрации FOSUserBundle, чтобы разрешить дополнительный параметр. Таким образом, решение существовало, но никогда не пыталось.
Других решений пока нет …