ホームページ  >  に質問  >  本文

Laravelでパッケージのジョブをオーバーライドする方法

<p>問題の概要: カスタム ジョブとパッケージのジョブは同じ名前空間を持っているため、インストールされているパッケージのジョブ クラスをオーバーライドできません。 <br /><br />AppJobs 名前空間を持ついくつかのジョブ クラスを含むパッケージがあるとします。このパッケージはAサービスとBサービスにインストールされます。ここで、パッケージのジョブはサービス A でディスパッチされ、サービス B で処理されます。 B サービスでは、パッケージ ジョブのハンドラー メソッドをオーバーライドするカスタム ジョブを作成しました。しかし、問題は、カスタム ジョブとパッケージ ジョブが同じ名前空間を持っているため、ディスパッチされたジョブを処理するためにカスタム ジョブが呼び出されず、B サービスが処理にパッケージ ジョブを使用することです。 </p>


P粉362071992P粉362071992416日前538

全員に返信(1)返信します

  • P粉295616170

    P粉2956161702023-08-01 09:35:33

    Laravel では、カスタム ジョブに別の名前空間を指定することで、パッケージのジョブをオーバーライドできます。これにより、パッケージのジョブ名前空間との競合が回避され、カスタム ジョブが確実に使用されるようになります。実行できる手順は次のとおりです:

    リーリー リーリー リーリー

    この設定では、ジョブがサービス A でディスパッチされ、サービス B で処理されると、Laravel は App\Jobs\Custom 名前空間でカスタム ジョブを検索します。カスタム ジョブが見つかった場合は、それが処理に使用され、ハンドル メソッドにカスタム ロジックを追加できます。カスタム ジョブが見つからない場合は、パッケージのジョブに戻ります。

    カスタム名前空間の登録を有効にするには、App\Providers\AppServiceProvider が正しく登録され、B サービスに読み込まれていることを確認する必要があることに注意してください。

    返事
    0
  • キャンセル返事