Отправка электронного письма при редактировании в SonataAdminBundle

Итак, в моем 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;
}

Теперь я застрял с двумя непонятными вещами с этой функцией:

  1. Как я могу получить текущую шляпу данных пользователя, которую я хочу отредактировать?

  2. Я вообще иду в правильном направлении? Нужно ли переопределять редактирование или, может быть, какую-то другую функцию?

РЕШЕНИЕ

Лучший способ — войти в систему в событии 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);
    }
}

person Dominykas55    schedule 27.07.2015    source источник
comment
непосредственно прослушивает изменения в пользовательском объекте Option ? или вы явно хотите, чтобы это происходило только через опцию редактирования в Сонате?   -  person Vamsi Krishna B    schedule 27.07.2015
comment
@VamsiKrishnaB Да, только в опции редактирования   -  person Dominykas55    schedule 27.07.2015


Ответы (1)


вы можете использовать крючки для сохранения.

   public function postUpdate($user)
    {
       //code to check if enabled 
       // code to send email    
    }
person Vamsi Krishna B    schedule 27.07.2015
comment
Это сработало! Я принимаю ваш ответ и обновляю свой пост решением для других кодеров. Спасибо! - person Dominykas55; 27.07.2015
comment
@ Dominykas55 имейте в виду, что каждый раз, когда вы обновляете сущность пользователя, код будет срабатывать. - person Vamsi Krishna B; 27.07.2015