向控制器提供 API-Client

我正在使用 Laravel 调用外部 API。


这是我的客户:


<?php


use GuzzleHttp\Client;


$client = new Client();


$response = $client->request('POST',

    'https://example.org/oauth/token', [

        'headers'     => [

            'cache-control' => 'no-cache',

            'Content-Type'  => 'application/x-www-form-urlencoded',

        ],

        'form_params' => [

            'client_id'     => '2',

            'client_secret' => 'client-secret',

            'grant_type'    => 'password',

            'username'      => 'username',

            'password'      => 'password',

        ],

    ]);


$accessToken = json_decode((string)$response->getBody(),

    true)['access_token'];

现在我可以用它来获取一些东西:


<?php

$response = $client->request('GET',

    'https://example.org/api/items/index', [

        'headers' => [

            'Accept'        => 'application/json',

            'Authorization' => 'Bearer '.$accessToken,

        ],

    ]);

所以现在我不想再次在每个方法上启动客户端。所以也许有一种很酷/类似 Laravel 的方式来$client在特定路由上向控制器提供?


我考虑过应用服务提供商或中间件,但我希望看到一个示例 :-)


守候你守候我
浏览 126回答 1
1回答

catspeake

也许你可以使用singleton?将您的实现包装在一个类中,YourHttpClient然后在您AppServiceProvider的 sregister方法中添加:$this->app->singleton('YourHttpClient', function ($app) {&nbsp; &nbsp; return new YourHttpClient();});然后你应该能够像这样在你的控制器构造函数中输入提示class SomeController {&nbsp; &nbsp; private $client;&nbsp; &nbsp; public function __construct(YourHttpClient $client) {&nbsp; &nbsp; &nbsp; &nbsp;$this->client = $client;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP