Почему я получаю класс не найден? (Laravel, PHP)

Я пытаюсь добавить привязку к методу регистрации в моем 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()
{
//
}

}?>

Как мне заставить это работать?

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;

но поскольку эти 2 класса находятся в одном пространстве имен, вы можете использовать здесь:

return new Payment;
1

Другие решения

Ваш Payment Привязка класса должна возвращать это:

return new \MyApp\Providers\Payment;

Пространство имен не отражает весь путь к каталогу, поэтому вам не нужно включать \app, Вы уже добавили "MyApp": "app/" к правилам PSR-0, чтобы отобразить это.

2

По вопросам рекламы [email protected]