0

我在为我的 Laravel 应用程序创建服务时遇到问题。我希望使用此服务轻松地与 API 通信以执行 IO 操作。具体来说,我的 Laravel 应用程序需要与 InvoiceNinja 通信。我正在使用 invoiceninja/sdk-php 来促进这种交流。根据他们的文档,它是这样使用的:

require __DIR__ . '/vendor/autoload.php';

use InvoiceNinja\Config as NinjaConfig;
use InvoiceNinja\Models\Client; // Model can be Invoice, Payment, etc

NinjaConfig::setURL('https://ninja.dev/api/v1');
NinjaConfig::setToken('Your Token');

$clients = Client::all();

上面的代码片段是使用 API 获取客户端列表的示例。现在,由于我使用的是 Laravel,我没有看到每次需要向 API 发送请求时都需要设置 API URL 和 Token。所以我决定使用服务提供商。以下是我在InvoiceNinjaServiceProvider.php注册方法中的代码:

$this->app->singleton(NinjaConfig::class, function ($app) {
    NinjaConfig::setURL(config('invoice-ninja.API_URL')); // I created a config/invoice-ninja.php which has these variables set
    NinjaConfig::setToken(config('invoice-ninja.API_TOKEN'));
});

然后我在config/app.php. 我认为这足以在我的控制器中使用 API,如下所示:

use InvoiceNinja\Models\Client;

public function index(InvoiceNinjaServiceProvider $invoiceNinja)
{
    $clients = Client::all();

    dd($clients); // To test that I actually receive data
}

但我得到一个错误Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\ServiceProvider。我不太熟悉服务提供商,我希望那里的人能指出我正确的方向以使其发挥作用。

谢谢你。谢谢!

4

1 回答 1

0

您应该在绑定单例时返回已解析的实例,该实例将作为参数注入到 youtindex方法中。
文档

  $this->app->singleton('HelpSpot\API', function ($app) {
    return new \HelpSpot\API($app->make('HttpClient'));
});

注意return

于 2020-11-06T10:10:17.003 回答