我需要知道在表单事件监听器中连接的用户。所以我在 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, 没有给出
我的目的是在用户连接时禁用字段电子邮件。
答案 0 :(得分:0)
冷却。我使用symfony 2.8,所以我必须在我的控制器中用new AlertType
更改AlertType::class
并且它有效;)