绑定类未在包中解析

Posted

技术标签:

【中文标题】绑定类未在包中解析【英文标题】:Bound class not resolving in package 【发布时间】:2021-11-17 00:02:42 【问题描述】:

我有一个通过服务提供者绑定到容器中的 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 多租户应用程序如何使用 URL 中的参数来切换土地负荷数据库。

这一切都在整个应用程序中按预期工作,如下所示:

$user = APIClient::get()
->class('users')
->routing('/123123/123123/123123')
->getResult();

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

不管怎样,眼前的问题。 我希望使用 API 来通过两个新的用户提供程序对用户进行身份验证,我已将它们添加到 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 中。

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

【问题讨论】:

【参考方案1】:

我更改了类构造方法以接受 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

【讨论】:

以上是关于绑定类未在包中解析的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind css 类未在 Storybook 构建中显示

管理类未在 django 中定义

c++ 类未在范围内声明 - 从 main 调用

动态类未在浏览器顺风中呈现 - Vue

jQuery 开关类未在 Chrome 中正确激活

宝塔面板防恶意解析