微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Laravel中创建服务提供商的正确方法

如何解决在Laravel中创建服务提供商的正确方法

我无法为Laravel应用程序创建服务。我希望使用此服务轻松与API通信以执行IO操作。具体来说,我的Laravel应用程序需要与InvoiceNinja通信。我正在使用invoiceninja / sdk-PHP来促进这种交流。根据{{​​3}},它的用法如下:

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和令牌。因此,我决定使用服务提供商。以下是我在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。我对服务提供商不是很精通,我希望那里的人可以指出正确的方向,以使其正常工作。

谢谢。谢谢!

解决方法

绑定单例时,您应该返回已解析的实例,该实例将作为参数注入您的API.UserAPI().readUserDetails() 方法中。
来自doc

index

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?