Итак, в моем UserAdmin я хочу отправить электронное письмо этому пользователю, если я подтвержу его учетную запись (в моем случае, делая Enabled = true
). Я делаю это в configureListFields
функцииОтправка электронной почты на редактирование в SonataAdminBundle
/**
* {@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);
}
}
непосредственно прослушиваете изменения на объекте пользователя варианты? или вы явно хотите, чтобы это произошло только через параметр редактирования в Sonata? – Vamsi
@ VamsiKrishnaB Да только по опции редактирования – Dominykas55