代码之家  ›  专栏  ›  技术社区  ›  lewis4u

Laravel 5.3“工作”不起作用

  •  0
  • lewis4u  · 技术社区  · 8 年前

    我已设置此通知:

    <?php
    
    namespace App\Notifications;
    
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Notifications\Notification;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Notifications\Messages\MailMessage;
    
    class Published extends Notification
    {
        use Queueable;
    
        /**
         * Create a new notification instance.
         *
         * @return void
         */
        public function __construct()
        {
    
        }
    
        /**
         * Get the notification's delivery channels.
         *
         * @param  mixed  $notifiable
         * @return array
         */
        public function via($notifiable)
        {
            return ['mail'];
        }
    
        /**
         * Get the mail representation of the notification.
         *
         * @param  mixed  $notifiable
         * @return \Illuminate\Notifications\Messages\MailMessage
         */
        public function toMail($notifiable)
        {
            return (new MailMessage)
                        ->from('support@ober24.de')
                        ->greeting('Hallo!')
                        ->subject('Neue Anfrage @ Ober24.de')
                        ->line('Wir haben ein neues Event für Sie verfügbar.')
                        ->action('Neues Event', 'http://localhost:8000/articles');
        }
    
        /**
         * Get the array representation of the notification.
         *
         * @param  mixed  $notifiable
         * @return array
         */
        public function toArray($notifiable)
        {
            return [
                //
            ];
        }
    }
    

    在我的队列控制器中,我有

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    use App\Http\Requests;
    
    class QueuesController extends Controller
    {
    
    
        public function index() {
    
    
        $users = \App\User::all();
    
            foreach ($users as $user) {
                dispatch(new \App\Jobs\SendNewArticleNotification); 
            }
    
        }
    }
    

    我只是不知道该在SendNewArticleNotification作业句柄方法中放入什么,以便所有用户都能收到电子邮件。。。。

    <?php
    
    namespace App\Jobs;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class SendNewArticleNotification implements ShouldQueue
    {
        use InteractsWithQueue, Queueable, SerializesModels;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
    
           ??????????????????????
    
        }
    }
    

    $user->通知(new\App\Notifications\Published());

    该行仅发送一封电子邮件,但失败,可能是因为未定义$user变量。

    1 回复  |  直到 8 年前
        1
  •  0
  •   lewis4u    8 年前

    好了,我终于解决了这个问题,所以如果有人需要,这里有解决方案:

    在控制器中 dispatch(new SendArticleNotification)

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Jobs\SendNewArticleNotification;
    use App\Http\Requests;
    
    class QueuesController extends Controller
    {
    
    
        public function notifyAllUsers() {
    
            $users = \App\User::all();
    
            foreach ($users as $user) {
                dispatch(new SendNewArticleNotification($user));
            }
    
        }
    }
    

    然后,在作业类中,$user变量只需要像这样实例化/构造

    <?php
    
    namespace App\Jobs;
    
    use App\Notifications\Published;
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class SendNewArticleNotification implements ShouldQueue
    {
        use InteractsWithQueue, Queueable, SerializesModels;
    
        protected $user;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($user)
        {
    
            $this->user = $user;
    
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
    
    
            $this->user->notify(new Published());
    
        }
    }