首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包中未解析绑定的类

包中未解析绑定的类
EN

Stack Overflow用户
提问于 2021-09-23 15:04:24
回答 1查看 13关注 0票数 2

我有一个通过服务提供者绑定到容器中的API类:

代码语言:javascript
复制
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数据库之间切换。

在整个应用程序中,这一切都像预期的那样工作:

代码语言:javascript
复制
$user = APIClient::get()
->class('users')
->routing('/123123/123123/123123')
->getResult();

我不认为API类的内部工作很重要,因为从本质上讲,这些方法是用来构建完整的URI和/或任何所需的POST数据的-如果我错了,请让我知道,我会更新。

不管怎样,现在的问题是。我希望使用该应用程序接口通过两个新的用户提供程序对用户进行身份验证,我已经将这两个提供程序添加到app/congif/auth.php中,如下所示

代码语言:javascript
复制
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'sl_business',
        ],
]
///
'providers' => [
        'sl_business' => [
            'driver' => 'sl_business'
        ]
]

其中,'sl_business'注册为身份验证提供程序:

代码语言:javascript
复制
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类。下面的代码在“应用程序”中运行良好,但没有解析包中的类:

代码语言:javascript
复制
$user = APIClient::get()
        ->class('employee')
        ->endPoint('login')
        ->route('/'.$loginid.'/'.$password.'/')
        ->getResult();

当我使用dd(resolve(APIClient::class));进行调试时,我得到:

代码语言:javascript
复制
Target class [Business\API\Auth\Providers\AIPClient] does not exist.

Business\API\Auth\Providers是我正在工作的提供程序的名称空间,不,AIPClient不存在于该目录中,它存在于Business\API中。

所有这些文件都在同一个包中,所以我想我正在尝试确定从我的包中的应用程序解析类的最佳方法,或者如果这是可能的话。

EN

回答 1

Stack Overflow用户

发布于 2021-09-23 18:50:46

我更改了类构造方法以接受APIClient作为参数,并更改提供程序注册以包括所述客户端:

代码语言:javascript
复制
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));
});   

和构造函数:

代码语言:javascript
复制
public function __construct(HasherContract $hasher, $model, APIClient $api)
{
    $this->model = $model;
    $this->hasher = $hasher;
    $this->api = $api;
}

现在,我可以作为$this->api在整个用户提供程序中访问APIClient

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69302540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档