在服务中使用Command

时间:2016-02-07 20:40:56

标签: laravel laravel-5

我正在使用Laravel 5.0并尝试设置一个命令,用于在我的邮件服务中排队作业。

我的问题是我不知道如何将命令调度程序注入我的邮件服务器。

我的结构:

  • 服务文件夹
    • Mailer.php(包含抽象类 Mailer
    • UserMailer.php(包含扩展Mailer类的类 UserMailer

我尝试过的事情:

我尝试在UserMailer类和Mailer类中使用DispatchesCommands特性。我还尝试将\ Illuminate \ Contracts \ Bus \ Dispatcher注入UserMailer类的构造函数。

在所有三个实例中,我收到一条错误,即#34; Class Services \ Mailers \ SendEmail Not Found"

Mailer.php:

abstract class Mailer
{
   public function emailTo($view, $mData)
   {

    Mail::queue($view, $mData, function($message) use ($mData)
    {
      //code here - not relevant 

        }
    });
 }
}

UserMailer.php:

use Illuminate\Contracts\Bus\Dispatcher as Dispatcher;

Class UserMailer extends Mailer
{

  protected $bus;

  function __construct(Dispatcher $bus)
  {
    $this->bus = $bus;

  }

  public function sendIndividualEmail($members)
  {

        // code here not relevant...

    $this->bus->dispatch(new SendEmail($members));

    return true;
  }

如何从UserMailer类中访问命令总线? TIA

1 个答案:

答案 0 :(得分:1)

您应该导入SendEmail类的完全限定的命名空间路径,例如:

use Illuminate\Contracts\Bus\Dispatcher as Dispatcher;

use Namespace\To\SendEmail; //<-- Add this "use" statement with correct namespace

Class UserMailer extends Mailer
{
    //...
}

因此,您可以在班级中使用new SendEmail($members)。在您的代码中,PHP正在查看SendEmail命名空间/文件夹中的Services\Mailers