我正试图向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;