سلام دوستان
میخوام یه queue درست کنم که زمانی کاربر لاگین کرد یه ایمیل به کاربر بفرسته و بگه که با این IP وارد اکانتش شدن (مثل SMSی که سایت راکت میفرسته)
چجوری ای پی کاربر، زمان لاگین و خود کاربر رو به Event و listener و mail برگردونم که تو دیتابیس Queue سیو بشه و وقتی Queue رو ران کردیم ایمیل رو بفرسته و به نظرتون کد زیری که واسه این موضوع نوشتم چه مشکلی داره که Queueم اجرا نمیشه
کدی که ایونت رو صدا میکنه:
event(new LoginLogReport(Auth::user() , Carbon::now() , request()->ip()));
کدی که توی ایونتم نوشتم:
{
$this->user = $user;
$this->time = $time;
$this->ip = $ip;
}
کدی که توی لیستنرم نوشتم:
public function __construct(User $user , $time , $ip)
{
$this->user = $user;
$this->time = $time;
$this->ip = $ip;
}
public function handle($event)
{
Mail::to($event->user())->send(new \App\Mail\LoginEmail($event->user , $event->time));
}
کدی که تو کلاس ایمیلم نوشتم:
public function __construct(User $user , $time,$ip)
{
$this->user = $user;
$this->time = $time;
$this->ip = $ip;
}
نمی دونم چرا کدای بالا کار نمیکنن، اروری هم نمیده.
سلام
بله
ایونتم رو اینجوری تعریف کردم :
class SendLoginLogEmail implements ShouldQueue
امروز دوباره کد رو چک کردم و این سری این ارور رو برام میاره :
Unresolvable dependency resolving [Parameter #1 [ <required> $time ]] in class AppListenersSendLoginLogEmail
@ezazsje
اگر دقت کنید میگه پارامتر $time در کلاس AppListenersSendLoginLogEmail الزامیه و ارسال نمیشه یا اشتباه ارسال میشه این مورد رو چک کنید و حتما مطمئن بشید همه پارامترها درسته
@hesammousavi
کلاس AppListenersSendLoginLogEmail رو دوباره چک کردم و $time رو توی کانسترکتش گرفتم.
من اومدم توی تریت AuthenticatesUsers متد authenticated رو بصورت زیر تغییر دادم و هرسه تا پارامتر user و time و ip رو بهش پاس دادم:
protected function authenticated(Request $request, $user)
{
$carbon = new Carbon;
event(new LoginLogReport(Auth::user() , $carbon->now() , request()->ip()));
}
توی listener هم اومدم این سه تا متغیر رو به توی ارگومان متد send کلاس Mail گذاشتم :
public function handle($event)
{
Mail::to($event->user())->send(new \App\Mail\LoginEmail($event->user , $event->time , $event->ip));
}
کانسترکت ایونت هم این سه تا رو به ترتیب میگیره :
public function __construct(User $user , $time , $ip )
{
$this->user = $user;
$this->time = $time;
$this->ip = $ip;
}
ارور زیر رو مطالعه کنید
[Parameter #۱ [ <required> $time ]] in class AppListenersSendLoginLogEmail
میگه پارامتر time لازمه حالا انقدر جدا جدا کدتون رو قرار دادید نمیشه متوجه شد برای کدوم کلاس ها هست .
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟