2014-12-08 6 views
0

Я изучаю мероприятие на Symfony. Я хочу отправить по электронной почте каждый раз, когда новый пользователь регистрируетсяОшибка при отправке Symfony 2

Я создал этот класс

UserEvent.php 
    <?php 
    namespace Acme\UserBundle\Event; 


    final class UserEvents { 

     const NEW_USER='new.user'; 


    } 

newUserEvent.php

<?php 

/** 
* EVENT DISPATCHER 
*/ 
namespace Acme\UserBundle\Event; 

use Acme\UserBundle\Entity\User; 
use Symfony\Component\EventDispatcher\Event; 


class NewUserEvent { 

    protected $user; 

    public function __construct (User $user) { 
     $this->user = $user; 
    } 

    public function getUser() { 
     return $this->user; 
    } 
} 

newUserListener.php

<?php 

namespace Acme\UserBundle\Event; 


class NewUserListener { 

    public function sendEmailToUsers(NewUserEvent $event) 
    { 
     // ... send email to users 
    } 
} 

в моем контроллер

/** 
    * @Route("/test",name="test") 
    */ 
    public function testEvento(){ 

     $em = $this->getEm(); 

     $dispatcher = new EventDispatcher(); 

     // attach listener 
     $listner = new NewUserListener(); 
     $dispatcher->addListener(UserEvents::NEW_USER,array($listner,'sendEmailToUsers')); 

     $user = $em->getRepository('AcmeUserBundle:User')->findOneBy(array('username' => 'alex')); //mock 
     $event = new NewUserEvent($user); 

     $dispatcher->dispatch(UserEvents::NEW_USER,$event); 



     return new Response('hi'); 
    } 

Но я получаю эту ошибку

ContextErrorException: Catchable Fatal Error: Argument 2 passed to Symfony\Component\EventDispatcher\EventDispatcher::dispatch() must be an instance of Symfony\Component\EventDispatcher\Event

Я не понимаю свою ошибку

+1

Попробуйте изменить класс 'NewUserEvent {' в 'класс NewUserEvent проходит событие {' – sjagr

+1

Symfony в [** EventDispatcher :: отправка() **] (https://github.com /symfony/EventDispatcher/blob/v2.6.1/EventDispatcherInterface.php#L38) требуется экземпляр собственного [** Event **] (https://github.com/symfony/EventDispatcher/blob/v2.6.1/Event .php). Поэтому, если вы хотите использовать его, ваше пользовательское событие должно продлить это последнее. – Touki

ответ

1

Read this.

  1. class NewUserEvent должны расширить Event класса (Symfony\Component\EventDispatcher\Event)
  2. в ступа к event_dispatcher службы в контроллере - $this->get('event_dispatcher')
Смежные вопросы