9

我想在新用户注册时收到通知。在我的控制器中,我触发一个事件,如下所示。

Event::fire('myapp.new_user', array($this->data['user']->email));

我在哪里定义listener

Event::listen('myapp.new_user', function ($uid) {
    Message::to("myemail@example.com")
                ->from("myemail@example.com", "My App")
                ->subject('New User')
                ->body("new user")
                ->html(true)
                ->send();
});

怎么listener知道一个事件被触发了?

4

3 回答 3

26

您需要确保在执行应用程序逻辑之前定义您的侦听器,当引发事件时,它们只能被已注册的侦听器捕获,它不会寻找新的侦听器。

在小型项目中,我只是将我的听众放在application/start.php文件的底部。这个文件在你的路由运行之前发生,它作为一个应用程序配置文件,有一些逻辑。您需要将这些事件放在文件的底部,至少在注册自动加载器映射之后。

在较大的项目中,我将在其中创建application/listeners.php并要求该文件application/start.php以提高可读性。

希望这可以帮助!

于 2012-11-13T23:56:50.147 回答
2

尝试 :

Event::listen('myapp.new_user', function ($uid) {
Message::to("myemail@example.com")
            ->from("myemail@example.com", "My App")
            ->subject('New User')
            ->body("new user")
            ->html(true)
            ->send();
return 'test my event';
});

http://laravel.com/docs/events

于 2013-08-26T00:45:38.263 回答
2

您还可以定义类来处理特定事件,然后使用服务提供者来注册它们。

下面是一个基本示例:

应用程序/NewUserListener.php

触发事件时调用的侦听器:

class NewUserListener
{
    public function handle($uid)
    {
        // Send an email here
    }
}

应用程序/ListenerServiceProvider.php

ServiceProvider - 记住并将其添加到 L4 Config 中的 Service Providers 列表中。

use Illuminate\Support\ServiceProvider;

class ListenerServiceProvider extends ServiceProvider
{
        public function register()
        {
            Event::listen('myapp.new_user', 'NewUserListener');
            // Register more events here...
        }
}

如果您将侦听器等组织到适当命名的文件夹中,那么如果您以后有一堆侦听器,最终维护起来会容易得多。如果您以这种方式编写侦听器,还可以实例化和测试侦听器。

于 2014-02-12T19:24:50.820 回答