Почему зарегистрированный сервис не работает в laravel? - PullRequest
1 голос
/ 26 июня 2019

Я создал службу в app/services/SubscriptionService.php

, затем импортировал ее в контроллер, используя App\Services\SubscriptionService;

, а затем в контроллер

public function subscribeIt(SubscriptionService $SubscriptionService, Request $request){
  $response = $SubscriptionService->subscribeIt($request);
  ...
}

Но в результате выполнения яполучаю Class App\Services\SubscriptionService does not exist Нужно ли регистрировать его у провайдера?Это в провайдере

public function register()
    {
        //
        $this->app->bind('App\Services\SubscriptionService', function ($app)    {
          return new SubscriptionService();
        });
    }

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Похоже, вы создали сервис в app/services/SubscriptionService.php.

Поскольку Laravel использует автозагрузку PSR-4 через composer, он ожидает, что каталог services будет заглавным.

Переименуйте папку, включив заглавную S, поэтому она должна перейти от app/services/SubscriptionService.php до app/Services/SubscriptionService.php.

2 голосов
/ 26 июня 2019

Помните, что пространства имен PHP чувствительны к регистру. Также по возможности используйте оператор ::class.

Что касается кода, измените это

$this->app->bind('App\Services\SubscriptionService', function ($app)    {
    return new SubscriptionService();
});

к этому

$this->app->bind(\App\Services\SubscriptionService::class, function ($app)    {
    return new SubscriptionService();
});

Sidenote: если вы не импортируете класс глобально, вам необходимо добавить обратную косую черту в пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...