2017-07-07 7 views
1

私は現在、自分のプロジェクトでswiftmailerを使用しようとしています。私は現在Sonata Adminに取り組んでいます。リストに表示されているオブジェクトを取得して、関連するメールアドレスを取得し、このリストに含まれるすべてのアドレスに電子メールを送信する方法を知りたかったのです。フィルターシステムがうまく機能し、電子メールを送信する人を選択するために使用するため、ソナタが表示するリストを参照したいと思います。私はこの形式でアドレステーブルにメールを送信することが可能であったsymfonyのドキュメントで見た:Sonata admin/swiftmailerリストから情報を取り戻す方法

$to = array('[email protected]', '[email protected]', '[email protected]'); 

$message = (new \Swift_Message('Hello Email')) 
    ->setFrom('[email protected]') 
      ->setTo(array($to)) 
      ->setBody('html content goes here', 'text/html'); 

$mailer->send($message); 

しかし、私はリストを形成するオブジェクトを取り戻す方法がわかりません。 このグリッドから。

grid ありがとうございました。

Ps: リストに表示されているすべての人に電子メールを送信するために、ボタンをリストの下に置くといいと思います。

ありがとうございます。

編集: 私は依然として検索しています.SQLリクエストは 't0.id'と 'c0.id'のようなものでした。 t0とc0はオブジェクトの名前ですか?それはいつもそうですか? t0とc0の違いは何ですか?

答えて

1

これは、管理者リストに操作を追加することで実行できます。
YourAdminBundle\Controllerフォルダに新しいクラスを作成し、Sonata\AdminBundle\Controller\CRUDControllerに拡張します。

カスタムアクションは、例えば次のようになります。

/** @property YourAdminClass $admin */ 
     public function batchActionSendMail(ProxyQueryInterface $selectedModelQuery ,$type = 'sendMails') { 

     if (false === $this->admin->isGranted('EDIT')) { 
      throw new AccessDeniedException(); 
     } 

      /* selected objects in your list !! */ 
      $selectedModels = $selectedModelQuery->execute(); 

      try{ 
      foreach ($selectedModels as $selectedModel){ 
       // your code to retrieve objects mails here (for instance) 
       } 
       //code to send your mails 

       } 
       catch(\Exception $e) 
       { 
        $this->addFlash('sonata_flash_error', "error"); 
       } 
       $this->addFlash('sonata_flash_success', 'mails sent') 

     return new RedirectResponse($this->admin->generateUrl('list')); 
      } 

、このカスタムCRUDコントローラをアクティブにしservices.ymlに行き、自分のクラスの管理ブロックを取得し、参照することにより、arguments財産の第三のparamを完了するにはカスタムCRUDコントローラ:

最後に
arguments: [null, YourBundle\Entity\YourEntity,YourAdminBundle:CustomCRUD] 

、あなたは、あなたのカスタムアクションを使用して、あなたの管理クラスに移動し、この機能を追加できるようにする:

public function getBatchActions() 
    { 
     if ($this->hasRoute('edit')) { 

       $actions['sendMails'] = array(
        'label'   => $this->trans('batch.sendMails.action'), 
        'ask_confirmation' => true, // by default always true 
       ); 
      } 
     return $actions; 
    } 

この操作は、管理者リストの下部にある[すべてを選択]チェックボックスの横にあるドロップダウンリストで利用できます。

関連する問題