2015-07-27 3 views
0

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

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

  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); 
    } 
} 
+0

непосредственно прослушиваете изменения на объекте пользователя варианты? или вы явно хотите, чтобы это произошло только через параметр редактирования в Sonata? – Vamsi

+0

@ VamsiKrishnaB Да только по опции редактирования – Dominykas55

ответ

0

вы можете использовать Saving hooks.

public function postUpdate($user) 
    { 
     //code to check if enabled 
     // code to send email  
    } 
+0

Работал! Я принимаю ваш ответ и обновляю свой пост с помощью решения для других кодеров. Благодаря! – Dominykas55

+0

@ Dominykas55 следует помнить, что каждый раз, когда вы обновляете объект пользователя, код запускается. – Vamsi

 Смежные вопросы

  • Нет связанных вопросов^_^