Laravel中的App \ Events和App \ Handlers \ Events有什么区别?

时间:2015-04-13 23:10:29

标签: php laravel laravel-5

我正在关注this lesson,并试图找出放置EmailNotifier类文件的目录,因为它是Event

我不知道它是否属于App\EventsApp\Handlers\Events

这就是我目前所拥有的:

<?php namespace App\Mailers;

use Illuminate\Mail\Mailer as Mail;

abstract class Mailer {

    private $mail;

    function __construct(Mail $mail)
    {
        $this->mail = $mail;
    }

    public function sendTo($user, $subject, $view, $data)
    {
        $this->mail->queue($view, $data, function ($message) use ($user, $subject)
        {
            $message->to($user->email)->subject($subject);
        });
    }
}

<?php namespace App\Mailers;

use App\User;

class UserMailer extends Mailer {

    /**
     * @param User $user
     */
    public function sendWelcomeMessageTo(User $user)
    {
        $subject = 'Welcome To Backstage!';
        $view = 'emails.registeration.confirm';
        $data = [];

        return $this->sendTo($user, $subject, $view, $data);
    }
}

<?php namespace App\Handlers\Events;

class EmailNotifier extends Event {

    private $mailer;

    public function __construct(UserMailer $mailer)
    {
        $this->mailer = $mailer;
    }

    public function whenUserHasRegistered(UserHasRegistered $event)
    {
        $this->mailer->sendWelcomeMessageTo($event->user);
    }
}

<?php namespace App\Events;

use App\Events\Event;

use Illuminate\Queue\SerializesModels;

class UserHasRegistered extends Event {

    use SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

}

1 个答案:

答案 0 :(得分:1)

这更像是一种随意关注的问题。您通常希望将类似目的项分类到同一名称空间中。 Handlers\Events听起来像是一个放置事件处理程序的地方,或者它可能是处理来自处理程序的事件的地方。

听起来您正在将事件放在Events命名空间中。公约和一致性是关键。只要它是一致的,最终名称空间的含义并不重要。 IMO更合乎逻辑的方法是为所有事件提供App\Event,并为事件类别提供子命名空间。如果处理程序位于App\EventHandler之类,并且根据需要将子命名空间分组成组,则处理程序将更加自我解释。

对于可能需要在将来使用您的代码的局外人来说,这是很清楚的。就一般组织结构而言,这是我的两分钱。

随着laracasts.com所暗示的链接进入Laravel的更深层背景。 App\Event命名空间用于EmailNotifier看起来的事件,其中App\Handlers\Events通常用于处理程序,订阅者,侦听器以及您想要调用它们的任何内容。