我正在关注this lesson,并试图找出放置EmailNotifier
类文件的目录,因为它是Event
。
我不知道它是否属于App\Events
或App\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()
{
//
}
}
答案 0 :(得分:1)
这更像是一种随意关注的问题。您通常希望将类似目的项分类到同一名称空间中。 Handlers\Events
听起来像是一个放置事件处理程序的地方,或者它可能是处理来自处理程序的事件的地方。
听起来您正在将事件放在Events
命名空间中。公约和一致性是关键。只要它是一致的,最终名称空间的含义并不重要。 IMO更合乎逻辑的方法是为所有事件提供App\Event
,并为事件类别提供子命名空间。如果处理程序位于App\EventHandler
之类,并且根据需要将子命名空间分组成组,则处理程序将更加自我解释。
对于可能需要在将来使用您的代码的局外人来说,这是很清楚的。就一般组织结构而言,这是我的两分钱。
随着laracasts.com所暗示的链接进入Laravel的更深层背景。 App\Event
命名空间用于EmailNotifier
看起来的事件,其中App\Handlers\Events
通常用于处理程序,订阅者,侦听器以及您想要调用它们的任何内容。