为什么我找不到上课? (Laravel,PHP)

时间:2014-11-07 17:20:29

标签: php laravel laravel-4 namespaces service-provider

我正在尝试在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/"
 }

应用程序/ 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;
        });
    }
}
?>

应用程序/ MyApp的/ Payment.php:

<?php namespace MyApp\Providers;

class Payment{

    public function process()
    {
        //
    }

}


?>

我如何让它工作?

2 个答案:

答案 0 :(得分:2)

您的Payment类绑定应该返回:

return new \MyApp\Providers\Payment;

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

答案 1 :(得分:1)

此处至少有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;