Laravel — поставщик услуг: класс не найден

Сегодня я начал проект на Laravel 5.4 и столкнулся с проблемой ServiceProvider. Вот мой поставщик услуг:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class WizamProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //die('YESSS');
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
      $this->app->bind('Wizam\Test', function()
      {
        if(class_exists("Domains\Domomat\Test"))
          return new \Domains\Domomat\Test;
        else
          return new \Core\Classes\Test;
      });
    }
}

Добавил этого провайдера в config/app.php (App\Providers\WizamProvider::class), сбросил автозагрузчик раз двадцать, почистил кеш, почистил конфиг. Ничего не произошло.

Вот мой маршрут:

Route::get('/sub', function()
{
  $test = new \Wizam\Test();
  echo $test->render();
});

Когда я перехожу к '/sub', я получаю Class 'Wizam\Test' not found. Я не вижу свою ошибку, вы можете мне помочь?

Спасибо !


person Treast    schedule 05.04.2017    source источник
comment
Вы настроили автозагрузку для своих классов в composer.json? Кроме того, если вы хотите использовать контейнер, вызовите его следующим образом: app(\Wizam\Test::class)   -  person Roj Vroemen    schedule 05.04.2017
comment
Для существующих классов да! Я не делал этого для \Wizam, потому что его технически не существует.   -  person Treast    schedule 05.04.2017
comment
БЛАГОДАРЮ ВАС !! app(\Wizam\Test::class) работает просто отлично!!!   -  person Treast    schedule 05.04.2017


Ответы (2)


Чтобы использовать контейнер, который вы не можете создать с помощью новой команды, вы можете либо внедрить его через конструктор

__constructor(\Wizam\Test $test)
{
}

или с помощью приложения (\Wizam\Test::class), я считаю, что это другой способ сделать это, как указано в комментариях.

person James    schedule 05.04.2017

Если кто-то однажды получит сообщение об ошибке, говорящее, что ваш интерфейс не найден («класс не найден»), во время закрытия поставщика услуг убедитесь, что ваш интерфейс и класс находятся в папке app/. Исправление этого заняло много времени. Хорошего дня.
P.S. ответ не имеет отношения к теме, но эту страницу я нашел впервые, когда начал гуглить решение, поэтому прошу вас оставить это здесь.

person Empty    schedule 08.02.2020