Я пытаюсь добавить привязку к методу регистрации в моем ServiceProvider, но я получаю эту ошибку:
{"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 ошибки.
Первая ошибка (та, которую вы указали в своем вопросе):
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;
но поскольку эти 2 класса находятся в одном пространстве имен, вы можете использовать здесь:
return new Payment;
Ваш Payment
Привязка класса должна возвращать это:
return new \MyApp\Providers\Payment;
Пространство имен не отражает весь путь к каталогу, поэтому вам не нужно включать \app
, Вы уже добавили "MyApp": "app/"
к правилам PSR-0, чтобы отобразить это.