Symfony以表单类型注入令牌存储

时间:2017-03-10 16:01:43

标签: symfony

我需要知道在表单事件监听器中连接的用户。所以我在 formType 类中注入了令牌存储并声明了该服务。但它似乎不起作用。

我做错了吗?

class AlertType extends AbstractType
{
    private $tokenStorage;

    /**
     * @param TokenStorageInterface $tokenStorage
     */
    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('email', EmailType::class, array('label' => 'Votre adresse email'));

        $builder->addEventListener(FormEvents::PRE_SET_DATA, array($this, 'onPreSetData'));
    }

    public function onPreSetData(FormEvent $event)
    {
        $user = $this->tokenStorage->getToken()->getUser();
        dump($user);
        die;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'FM\MailAlertBundle\Entity\Alert',
        ));
    }
}

服务声明:

 services:
        fm.mail_alert.form.alert_type:
            class: FM\MailAlertBundle\Form\AlertType
            arguments:
                - '@security.token_storage'
            tags:
                - { name: form.type }

错误讯息:

  

类型错误:参数1传递给   FM \ MailAlertBundle \ Form \ AlertType :: __ construct()必须实现   接口   Symfony的\分量\安全\核心\认证\令牌\存储\ TokenStorageInterface,   没有给出

我的目的是在用户连接时禁用字段电子邮件。

1 个答案:

答案 0 :(得分:0)

冷却。我使用symfony 2.8,所以我必须在我的控制器中用new AlertType更改AlertType::class并且它有效;)