我希望能够将一个存储库注入一个注册表单(类似于this approach)以在事件监听器中使用,但我得到:
捕获致命错误:传递给AppBundle \ Form \ RegistrationType :: __ construct()的参数1必须>是一个AppBundle \ Entity \ FocusRepository的实例,给定的字符串,在G:\ Documents \ workspace>中调用第155行\ match \ vendor \ pugx \ multi-user-bundle \ PUGX \ MultiUserBundle \ Model \ UserDiscriminator.php
我可以在模板中解决这个问题,但使用事件监听器似乎是一个更优雅的解决方案。有什么建议吗?
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
答案 0 :(得分:0)
发生错误是因为PUGXMultiUserBundle使用FOSUserBundle注册(和配置文件)表单。这些表单在构造函数中已经有一个字符串(表示User类)。我已经放弃了这个问题,并采用了不同的方法。但我现在知道我可能已经使用Compiler Pass来覆盖FOSUserBundle注册表单服务以允许其他参数。所以存在解决方案,但从未尝试过。