Laravel ReflectionException - Класс обслуживания не существует - PullRequest
0 голосов
/ 04 июля 2019

Создание простого бэкэнд-приложения Laravel.Попытка поддерживать контроллер в чистоте и поместить всю бизнес-логику в Service, которая будет использовать модель для запроса данных.

Я пробовал несколько различных вариантов (примеров), найденных здесь и в документации.Также запустите дамп-автозагрузку и обновление композитора.все еще появляется сообщение об ошибке, что класс Service не существует.

CarController.php

<?php

namespace App\Http\Controllers;

use App\Services\CarService;

class CarController extends Controller
{

    protected $carService;

    public function __construct(CarService $carService)
    {
        $this->carService = $carService;
    }

    public function getCar()
    {
        return $carService::getCar();
    }
}
?>

CarService.php

<?

namespace App\Services;

class CarService
{
    public function getCar()
    {
        return 'Hello';
    }

}
?>

При вызове функции getCar в контроллере возникает ошибка:

<?

namespace App\Services;

class CarService
{
    public function getCar()
    {
        return 'Hello';
    }

}
?>

В Почтальоне я получил следующую ошибку

{"message": "Class App \ Services \ CarService не существует", "exception": "ReflectionException"," file ":" /home/MyDev/BackEnd/vendor/laravel/framework/src/Illuminate/Container/Container.php "," line ": 826," trace ": [{" file ":" / home/MyDev/BackEnd/vendor/laravel/framework/src/Illuminate/Container/Container.php "," line ": 826," function ":" getClass "," class ":" ReflectionParameter "," type ":" -> "

(Я использую Postman для вызова API, который вызывает контроллер. Не уверен, почему необработанный ответ распечатывает содержимое CarService и в то же время говорит, что его не существует ...)

спасибо

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Вы все делаете правильно, за исключением вызова $carService, вам нужно обратиться к экземпляру класса, чтобы получить к нему доступ, поэтому попробуйте это вместо этого в вашем контроллере:

public function getCar()
{
    return $this->carService->getCar();
}

Если вы хотите обращаться к нему как к статическому методу CarService::getCar(), вам не нужно вводить службу в контроллер, и вам нужно будет изменить сигнатуру функции на public static function getCar() в вашем классе обслуживания .

0 голосов
/ 08 июля 2019

о боже, нашел проблему.мой сервисный php тег был просто ", но он ДОЛЖЕН быть" добавлен php и класс найден, все работает.о боже ...

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