[英]Register Different services using same class in my Laravel 5.7 Jobs?
我的 Laravel 應用程序有以下課程:
namespace App\Api\Consumers
class ShoppingCartApiConsumer
{
private $baseUrl="https://shopping.example.com";
private $apiUrl="";
private $headers=[];
public function __construct(string $apiKey, string $shoppingCartId)
{
$this->apiUrl=$baseUrl."/shoppingCart/$shoppingCartId";
$this->headers["Authorization"]="Bearer $apiKey"];
}
// Rest of methods here
}
我有以下工作:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
class PrivateShoppingListConsumer implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
private $item;
public function __construct(string $item)
{
$this->item=$item
}
public function handle(ShoppingCartApiConsumer $cart):void
{
//Logic Implemented here
}
}
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
class WorkShoppingListConsumer implements ShouldQueue
{
use Dispatchable;
use InteractsWithQueue;
use Queueable;
private $item;
public function __construct(string $item)
{
$this->item=$item
}
public function handle(ShoppingCartApiConssumer $cart):void
{
if($item != "computer"){
return;
}
//rest of code here
}
}
PrivateShoppingListConsumer
需要以下ShoppingCartApiConsumer
實例
$config=config('shoppingCart');
$consumer=new ShoppingListConsumer($config['api_key'],$config['private_shopping_cart_id']);
WorkShoppingListConsumer
需要ShoppingListConsumer
以下實例:
$config=config('shoppingCart');
$consumer=new ShoppingListConsumer($config['api_key'],$config['work_shopping_cart_id']);
實例初始化的配置如下:
return [
'api_key' => env("API_KEY"),
'private_shopping_cart_id' => env("PRIVATE_SHOPPING_CART_ID");
'work_shopping_cart_id' => env("WORK_SHOPPING_CART_ID");
]
所以我想知道如何使用 laravel 的服務容器將以下實例傳遞給每個作業? 因為WorkShoppingListConsumer
和PrivateShoppingListConsumer
需要適當的類實例才能使我的業務邏輯正常工作。
為此,您需要根據文檔和服務容器文檔定義自定義服務提供者,例如:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ShoppingCartApiConsumerProvider extends ServiceProvider
{
public function register():void
{
$config=config('shoppingCart');
$privateConsumer=new ShoppingListConsumer($config['api_key'],$config['private_shopping_cart_id']);
$workConsumer=new ShoppingListConsumer($config['api_key'],$config['work_shopping_cart_id']);
$this->app->bindMethod(PrivateShoppingListConsumer::class.'@handle', function ($job, $app) use ($privateConsumer) {
return $job->handle($privateConsumer);
});
$this->app->bindMethod(WorkShoppingListConsumer::class.'@handle', function ($job, $app) use ($workConsumer) {
return $job->handle($workConsumer);
});
//Append here more jobs on how to be dispatched
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.