Хорошо.Вернуться к истокам.Начните с того, что получите себе IDE, такую как PHPStorm.Он будет выделять различные синтаксические ошибки, а что нет.В частности, IDE поможет с проблемой пространства имен службы, а также с рядом других проблем.
Фундаментальная концепция внедрения зависимостей заключается в том, что зависимости, необходимые для данного класса, должны быть, впрочем, внедрены.Вашему классу GeneralService нужен менеджер сущностей.В вашем предыдущем идентичном вопросе у вас был GeneralService, расширяющий AbstractController, потому что AbstractController имеет метод getDoctrine.Это все равно не сработало бы, потому что getDoctrine, в свою очередь, нуждается в контейнере службы.И, конечно же, в вашем текущем коде GeneralService вообще не имеет метода getDoctrine.
В любом случае, поскольку GeneralService нужен менеджер сущностей, введите его:
# src/Service/GeneralService.php
namespace App\Service; # NOTE App\Service not just Service
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class GeneralService
{
private $entityManager;
// Let Symfony inject whatever dependencies are needed
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function list(Request $request, String $entityClass) : JsonResponse
{
if (!$request->headers->has('api-key')) {
return new JsonResponse(['error' => 'Please provide an API_key'], 401);
}
if (!$request->headers->get('api-key') !== $_ENV['API_KEY']) {
return new JsonResponse(['error' => 'Invalid API key'], 401);
}
return new JsonResponse($this->entityManager->getRepository($entityClass)->findAll());
}
}
И не исключайтеGeneralService больше.
С вашим классом контроллера все в порядке, когда вы используете IDE, чтобы избавиться от всех небольших синтаксических ошибок:
namespace App\Controller;
use App\Service\GeneralService;
use App\Entity\SomeEntity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class SubscriptionClass extends AbstractController
{
public function AuthenticateAPI(Request $request, GeneralService $generalService)
{
$AuthenticatorObject = $generalService->list($request,SomeEntity::class);
return $AuthenticatorObject;
}
}
Я на самом деле не тестировал приведенный выше код, хотядолжен сделать вас хотя бы на шаг впереди.
Последнее замечание: не обращайтесь напрямую ни к одному из суперглобальных элементов, т. е. $ _ENV ['API_KEY'] - это нет, нет.Ключ api_key должен быть введен вместе с менеджером сущности.Я оставлю точные детали в качестве упражнения для студента, поскольку введение строк немного отличается от ввода объектов.