Php ReflectionException:类StripeBilling不存在
我正在尝试实现一个使用Stripe的计费接口。 我已经创建了Billing接口、Stripe类,并使用服务提供商绑定了接口 尝试运行代码时,我收到一个类未找到错误: Container.php行737:Class中的ReflectionException Acme\Billing\StripeBilling不存在 我不知道问题是什么,我已经仔细检查了一些小问题,如正确的案例等 以下是我使用的代码: app/Acme/Billing/BillingInterface.phpPhp ReflectionException:类StripeBilling不存在,php,laravel,composer-php,Php,Laravel,Composer Php,我正在尝试实现一个使用Stripe的计费接口。 我已经创建了Billing接口、Stripe类,并使用服务提供商绑定了接口 尝试运行代码时,我收到一个类未找到错误: Container.php行737:Class中的ReflectionException Acme\Billing\StripeBilling不存在 我不知道问题是什么,我已经仔细检查了一些小问题,如正确的案例等 以下是我使用的代码: app/Acme/Billing/BillingInterface.php <?php
<?php
namespace Acme\Billing;
interface BillingInterface {
public function charge(array $data);
}
<?php
namespace Acme\Billing;
use Stripe;
use Stripe_Charge;
use Stripe_Customer;
use Stripe_InvalidRequestError;
use Stripe_CardError;
use Exception;
class StripeBilling implements BillingInterface {
public function __construct()
{
Stripe::setApiKey(env('STRIPE_SECRET_KEY'))
}
public function charge(array $data)
{
try
{
return Stripe_Charge::create([
'amount' => 1000, // £10
'currency' => 'gbp',
'description' => $data['email'],
'card' => $data['token']
]);
}
catch(Stripe_CardError $e)
{
dd('card was declined');
}
}
}
BasketController.php(已添加)
我已将
App\Providers\BillingServiceProvider::class
添加到我的App.php
文件中,并更新了我的composer.json以包含Acme文件夹“Acme\\”:“App/”
,您的问题看起来有两方面:
composer.json
文件中的PSR-4自动加载定义不正确
如果您的Acme文件夹位于app文件夹内,例如/dir/project\u root/app/Acme/Billing/BillingInterface.php
,则您的composer.json定义应如下所示:
"psr-4": {
"Acme\\": "app/Acme"
}
class BillingServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('Acme\Billing\BillingInterface', 'Acme\Billing\StripeBilling');
}
}
这是您收到的错误的根本原因,它不是特定于Laravel的错误。即使请求的完全限定类名正确,自动加载程序也无法找到您请求的类Acme
部分)
因为您已经在Acme
名称空间中定义了这两个名称,所以需要确保Acme存在于您的服务提供商定义中。因此,您的服务提供商应如下所示:
"psr-4": {
"Acme\\": "app/Acme"
}
class BillingServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('Acme\Billing\BillingInterface', 'Acme\Billing\StripeBilling');
}
}
(或者更好地使用::class
语法来改进IDE支持。)
在控制器中请求类时,还需要确保完全限定的类名正确:App::make('Acme\Billing\BillingInterface')
。(无论如何,我建议使用依赖项注入而不是这种语法。)PSR-0还是PSR-4?如果是PSR-4,则路径错误。PSR-4从类名中删除前缀,剩余部分转换为路径-因此在搜索路径中没有“Acme”部分,但在您的路径中却是;更改我的提供者中的绑定,如
$this->app->bind('Billing\BillingInterface','Billing\StripeBilling')
返回一个类Acme\Billing\BillingInterface不存在
而不是请检查更新的问题,如图所示更改代码后,我仍然得到原始错误。我已经更正了composer.json中的路径,但是$this->app->bind('Acme\Billing\BillingInterface',Acme\Billing\StripeBilling')是否奇怪代码>不起作用,但$this->app->bind('Billing\BillingInterface','Acme\Billing\StripeBilling')代码>是什么?我找不到BillingInterface。您可能在尝试注入计费服务(如控制器或其他服务)的任何位置请求不正确的命名空间。请确保您在使用BillingInterface或StripeBilling实现的任何地方都使用了完整、正确的命名空间(例如,Acme\Billing\BillingInterface
)。感谢Cryode,这并不是说它会阻止我将此标记为答案,但您能给我一个如何使用依赖注入的示例吗?