0

我希望能够将存储库注入注册表单(类似于这种方法)以在事件侦听器中使用,但我得到:

可捕获的致命错误:传递给 AppBundle\Form\RegistrationType::__construct() 的参数 1 必须 > 是 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
4

1 回答 1

0

发生错误是因为 PUGXMultiUserBundle 使用 FOSUserBundle 注册(和配置文件)表单。这些表单在构造函数中已经有一个字符串(指示用户的类)。我已经放弃了这个问题并使用了不同的方法。但我现在知道我也许可以使用编译器通行证来覆盖 FOSUserBundle 注册表单服务以允许附加参数。所以存在一个解决方案,但从未尝试过。

于 2015-10-27T22:49:35.417 回答