2017-01-23 10 views
1

私はサービスクラスapp(MailService::class);に重いロジックを書いていますが、サービスクラスからは$this->release()を実行するか、$this->attempts()のようにチェックしてください。Laravel - サービスクラスを柔軟にする方法

同様に、コマンド(SendReminderCommand)を$this->error()または$this->info()に渡すと、どのように返信しますか?これはコントローラにとっても柔軟性があります。

サービスクラスを柔軟に使用したいので、ジョブクラス、コマンド、またはコントローラでも使用できます。例えば

ジョブ・クラス

class SendReminderEmail extends Job implements SelfHandling, ShouldQueue 
    { 
     use InteractsWithQueue, SerializesModels; 

     public function handle() 
     { 
      $mail = app(MailService::class); //service class 

      $this->release(10) 
      $this->attempts() 
     } 
    } 

コマンドクラス

class SendReminderCommand extends Command 
{ 
    protected $signature = 'email:reminder'; 
    protected $description = 'Send Reminder'; 

    public function handle() 
    { 
     $mail = app(MailService::class); //service class 

     $this->info("Emails Sent"); 
     $this->error('Something went wrong!'); 
    } 
} 
+0

あなたの 'MailService'はコンストラクタで初期化以外の何かを実行していますか? – nCrazed

+0

@nCrazed MailServiceは単なるクラス名の例です...何でもかまいません 'class MailService {}'自由に回答を投稿してください。 –

+0

私は、あなたが 'MailService'インスタンスをインスタンス化した後で、それを呼び出そうとしていないという事実をもっと心配していました。 – nCrazed

答えて

1

非クエリメソッドを持っていると仮定することができるようにあなたがあなたのサービスのメソッドを構築することができます例外がスローされなかった場合は成功しました:

public function handle(MailService $mail) 
{ 
    try { 
     $mail->performAction(); 
     $this->info('Action Complete'); 
    } catch (RecoverableProblem $e) { 
     /* Recover and perhaps retry at a later time? */ 
    } catch (UnrecoverableProblem $e) { 
     $this->error('Something went wrong!'); 
     /* Abort? */ 
    } 
} 

ロギングメソッドにいくつかの追加情報を渡す必要がある場合は、サービスメソッドからその情報を返し、戻り値を使用してメッセージを作成します。

+0

お返事ありがとうございます。 '戻り値を使ってメッセージを作成する'あなたが意味することはわかりません。あなたはこのような何かを返すことを意味する 'return ['success' => true、 'message' => '情報メッセージはここ'];'そうでなければ、あなたはあなたの答えを更新することができます。 –

+0

これは、何が失敗とみなされるかによって異なります。ほとんどの場合、失敗した場合に例外をスローし、呼び出し側(この場合はコマンドまたはキュージョブクラス)が適切に見えるように処理してください。そうすれば、明確な成功の確認は必要ありません。成功は例外がないことを意味し、実際のデータのみがメソッドによって返される必要があります。 – nCrazed

+0

それは私が意味したものです、どのように実際のデータは、メソッドによって返されて見える必要がありますか? –

関連する問題