Tekrar merhabalar. cevabınızdan beri uğraştım fakat bir türlü birbirlerine geçiremedim. Aşağıda kodlarımı paylaşıyorum.
Bu provider'ı config/app.php dosyasındaki providers dizisine ekledim.
<?php
namespace App\Providers;
use GuzzleHttp\Client;
use Illuminate\Support\ServiceProvider;
class RestProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind(TokenManager::class, function ($app) {
$config = config('api_config');
return new TokenManager($config);
});
$this->app->bind(HttpClient::class, function ($app) {
$token = $app->make(TokenManager::class)->getToken();
$client = new Client([
]);
return new HttpClient($client, $token);
});
$this->app->bind(APIWrapper::class, function ($app) {
$httpClient = $app->make(HttpClient::class);
return new APIWrapper($httpClient);
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
App/Libraries dizininde aşağıdaki sınıfları oluşturdum.
namespace App\Libraries;
class TokenManager
{
public function getToken()
{
return "jkfsdjkdsfjklfsdkl";
}
}
namespace App\Libraries;
use GuzzleHttp\Client;
class HttpClient
{
public $client;
function __construct(Client $client)
{
$this->client = $client;
}
function get($path)
{
$this->client->request('GET', env("REST_API_ADDR") . $path);
}
}
namespace App\Libraries;
class APIWrapper
{
public $httpClient;
function __construct(HttpClient $httpClient)
{
$this->httpClient = $httpClient;
}
}
Şu da UserService sınıfım.
namespace App\Services;
use App\Libraries\APIWrapper;
class UserService
{
protected $path = 'user';
protected $api;
public function __construct(APIWrapper $api)
{
$this->api = $api;
}
public function details($id)
{
$details = $this->api->httpClient->get($this->path . "/detail?userid=" . $id);
dd($details);
}
}
UserController içindeki ilgili metot ise şöyle:
public function show(UserService $userService, $id)
{
$details = $userService->details($id);
dd($details);
}
Bu kodlar sonucunda REST Api'ye istek gittiğini ve bana vermesi gereken cevabı verdiğini görüyorum. Bu cevapta token göndermediğimi söylüyor.
GuzzleHttp \ Exception \ ClientException (401)
Client error: `GET http://......../detail?userid=803` resulted in a `401 Unauthorized` response: {"error":"Token not provided."}
RestProvider.php sınıfımda Client (guzzle) için varsayılan parametreler vs eklemeye çalışıyorum. Fakat başarısız oldum.
Sanıyorum ki bağımlılıkları birbirlerine geçirme işlemlerini doğru anlayamadım. Nasıl bir yol izleyebilirim? Alternatif önerileriniz ne olabilir?
Teşekkürler.