Laravel 5.1在侦听器中访问事件对象
我正在试用Laravel5.1的队列,在其侦听器中使用$event对象时遇到问题 AuthController.phpLaravel 5.1在侦听器中访问事件对象,laravel,events,queue,listeners,Laravel,Events,Queue,Listeners,我正在试用Laravel5.1的队列,在其侦听器中使用$event对象时遇到问题 AuthController.php public function postGenerateResetToken() { try { $admin = Admin::where( 'email', '=', Input::get( 'email' ) )->firstOrFail(); $token = Bus::dispatch( new Generate
public function postGenerateResetToken()
{
try
{
$admin = Admin::where( 'email', '=', Input::get( 'email' ) )->firstOrFail();
$token = Bus::dispatch( new GeneratePasswordResetToken( $admin ) );
event( new PasswordResetTokenWasGenerated( $admin, $token ) );
return success();
}
catch( ModelNotFoundException $exception )
{
return fail();
}
}
PasswordResetTokenWasGenerated.php
class PasswordResetTokenWasGenerated extends Event
{
use SerializesModels;
public function __construct( $admin, $token )
{
$this->admin = $admin;
$this->token = $token;
}
public function broadcastOn()
{
return [];
}
}
SendForgottenPasswordEmail.php
class SendForgottenPasswordEmail implements ShouldQueue
{
public function __construct()
{
//
}
public function handle(PasswordResetTokenWasGenerated $event)
{
$data = [
'admin' => $event->admin,
'token' => $event->token
];
Mail::send( 'emails.forgotten-password', $data, function( $message ) use ( $event )
{
$message->subject( 'Forgotten password' );
$message->to( $event->admin->email );
});
}
}
在处理程序中使用$event->admin
会导致未定义的属性:PasswordResetTokenWasGenerated::$admin
但是,只有在侦听器上实现ShouldQueue
接口时,才会发生此错误。没有界面,它就可以正常工作
队列驱动程序设置为sync
我知道这是因为排队,但它不是应该按照我希望的方式工作吗 在设置管理员和令牌之前,应将其声明为公共的: 类PasswordResetTokenWasGenerated扩展事件 { }
之后,您应该能够访问侦听器中的这些属性。您可以粘贴事件类的真实代码吗?你提供的是一些伪代码。太棒了!这实际上解决了这个问题。我不会发现这一点,因为“public”是默认的访问修饰符。。。但是,当然,反射是如何工作的。。。非常感谢。
use SerializesModels;
public $admin;
public $token;
public function __construct( $admin, $token )
{
$this->admin = $admin;
$this->token = $token;
}
public function broadcastOn()
{
return [];
}