为什么找不到我的班级?(Laravel,PHP)


Why am I getting class not found? (Laravel, PHP)

我正试图向ServiceProvider中的register方法添加绑定,但我一直收到这个错误:

{"error":{"type":"Symfony''Component''Debug''Exception''FatalErrorException","message":"Class 'MyApp''Providers''App' not found","file":"'/Users'/foobar'/Dropbox'/Staff Folders'/foobar'/htdocs'/bla'/test'/app'/MyApp'/Providers'/TestServiceProvider.php","line":14}}

composer.json:

"psr-0": {
   "MyApp": "app/"
 }

app/MyApp/TestServiceProvider.php:

<?php namespace MyApp'Providers;
use Illuminate'Support'ServiceProvider;
class TestServiceProvider extends ServiceProvider {
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        App::bind('payment', function()
        {
            return new 'app'MyApp'Providers'Payment;
        });
    }
}
?>

app/MyApp/Payment.php:

<?php namespace MyApp'Providers;
class Payment{
    public function process()
    {
        //
    }
}

?>

我该如何让它发挥作用?

您的Payment类绑定应该返回以下内容:

return new 'MyApp'Providers'Payment;

命名空间并不反映整个目录路径,因此不需要包含'app。您已经将"MyApp": "app/"添加到PSR-0规则中以进行映射。

这里至少有2个错误。

第一个错误(你在问题中显示的错误)是:

App::bind('payment', function()
{
    return new 'app'MyApp'Providers'Payment;
});

因为您的文件是MyApp'Providers命名空间,所以需要使用:

此处使用'App::bind而不是App:bind,或者以这种方式在命名空间后添加use App;

<?php namespace MyApp'Providers;
    use App;

第二个错误是@Bogdan提到的错误。代替:

return new 'app'MyApp'Providers'Payment;

您应该使用:

return new 'MyApp'Providers'Payment;

但是因为这两个类在同一个命名空间中,所以可以在这里使用:

return new Payment;