Итак, в моем UsersAdmin я хочу отправить электронное письмо этому пользователю, если я подтвержу его учетную запись (в моем случае, сделав Enabled = true
). Я делаю это в функции configureListFields
/**
* {@inheritdoc}
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('username')
->add('email')
->add('groups')
->add('enabled', null, array('editable' => true)) //here
->add('locked', null, array('editable' => true))
->add('createdAt')
;
}
Читая документацию, я думаю, что мне нужно использовать функцию batchAction, да? Итак, я сделал это:
public function getBatchActions()
{
// retrieve the default batch actions (currently only delete)
$actions = parent::getBatchActions();
$container = $this->getConfigurationPool()->getContainer();
$user = //how to get the user that i am editing right now?
if ($this->hasRoute('edit') && $this->isGranted('EDIT')) {
$body = $container->get('templating')->render('MpShopBundle:Registration:registrationEmail.html.twig', array('user'=> $user));
$message = Swift_message::newInstance();
$message->setSubject($container->get('translator')->trans('registration.successful'))
->setFrom($container->getParameter('customer.care.email.sender'))
->setTo('[email protected]')
->setBody($body, 'text/html');
$container->get('mailer')->send($message);
}
return $actions;
}
Теперь я застрял с двумя непонятными вещами с этой функцией:
Как я могу получить текущую шляпу данных пользователя, которую я хочу отредактировать?
Я вообще иду в правильном направлении? Нужно ли переопределять редактирование или, может быть, какую-то другую функцию?
РЕШЕНИЕ
Лучший способ — войти в систему в событии postUpdate, чтобы каждый раз, когда вы обновляете объект, он инициировал нужные вам функции.
public function postUpdate($user)
{
if($user->getEnabled() == true) {
$container = $this->getConfigurationPool()->getContainer();
$body = $container->get('templating')->render('MpShopBundle:Registration:registrationEmail.html.twig', array('user' => $user));
$message = Swift_message::newInstance();
$message->setSubject($container->get('translator')->trans('registration.successful'))
->setFrom($container->getParameter('customer.care.email.sender'))
->setTo('[email protected]')
->setBody($body, 'text/html');
$container->get('mailer')->send($message);
}
}