Laravel 5.3“工作”不工作

问题描述:

我已经安装此通知:Laravel 5.3“工作”不工作

<?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('[email protected]') 
        ->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 [ 
      // 
     ]; 
    } 
} 

,并在我的QueuesController我有这个

<?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-> notify(new \ App \ Notifications \ Published( ));

这行只发送一封邮件,但失败,可能是因为$ user变量没有定义。

如何将$ user变量从控制器传输到Job?

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

在控制器

,该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()); 

    } 
} 
构建