我有一个通过服务提供者绑定到容器中的API类:
public function register()
{
$this->app->bind('apiclient', fn($app) => new APIClient($app));
}它在'app/config/app.php'中没有像在packages.json中那样被定义为包。
它是用$app构建的,因为URL中有一个参数,用于切换API用于其请求的base_uri -类似于Spatie Multi-tenancy应用程序如何使用URL中的参数在landload数据库之间切换。
在整个应用程序中,这一切都像预期的那样工作:
$user = APIClient::get()
->class('users')
->routing('/123123/123123/123123')
->getResult();我不认为API类的内部工作很重要,因为从本质上讲,这些方法是用来构建完整的URI和/或任何所需的POST数据的-如果我错了,请让我知道,我会更新。
不管怎样,现在的问题是。我希望使用该应用程序接口通过两个新的用户提供程序对用户进行身份验证,我已经将这两个提供程序添加到app/congif/auth.php中,如下所示
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'sl_business',
],
]
///
'providers' => [
'sl_business' => [
'driver' => 'sl_business'
]
]其中,'sl_business'注册为身份验证提供程序:
Auth::provider('sl_business', function ($app, array $config) {
// Return an instance of Illuminate\Contracts\Auth\UserProvider...
return new EmployeeUserProvider($this->app['hash'], $config['model']);
});LoginRequest正确地使用了此用户提供程序,但是,EmployeeUserProvider无法使用APIClient类。下面的代码在“应用程序”中运行良好,但没有解析包中的类:
$user = APIClient::get()
->class('employee')
->endPoint('login')
->route('/'.$loginid.'/'.$password.'/')
->getResult();当我使用dd(resolve(APIClient::class));进行调试时,我得到:
Target class [Business\API\Auth\Providers\AIPClient] does not exist.Business\API\Auth\Providers是我正在工作的提供程序的名称空间,不,AIPClient不存在于该目录中,它存在于Business\API中。
所有这些文件都在同一个包中,所以我想我正在尝试确定从我的包中的应用程序解析类的最佳方法,或者如果这是可能的话。
发布于 2021-09-23 18:50:46
我更改了类构造方法以接受APIClient作为参数,并更改提供程序注册以包括所述客户端:
Auth::provider('sl_business', function ($app, array $config) {
// Return an instance of Illuminate\Contracts\Auth\UserProvider...
return new EmployeeUserProvider($this->app['hash'], $config['model'], new APIClient($this->app));
}); 和构造函数:
public function __construct(HasherContract $hasher, $model, APIClient $api)
{
$this->model = $model;
$this->hasher = $hasher;
$this->api = $api;
}现在,我可以作为$this->api在整个用户提供程序中访问APIClient
https://stackoverflow.com/questions/69302540
复制相似问题