我有这个控制器
Controller1.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class file1Controller extends AbstractController
{
/**
* @Route("/Some/URI", methods={"GET"})
* @param Request $request
* @return JsonResponse
*/
public function list(Request $request)
{
if (empty($request->headers->get('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->getDoctrine()->getRepository('App:Something')->findAll());
}
}
其工作原理完全符合预期(使用 Postman 和我的浏览器对其进行了测试)。我想概括地将通用控制器作为服务并为每个控制器使用该服务,Controller1.php
, Controller2.php
and Controller3.php
除了@route
和Something
方法内部getRepository
.
这是我的尝试:
GeneralService.php
<?php
namespace Service;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class GeneralService
{
/**
* @param Request $request
* @param String $entity
* @return JsonResponse
*/
public function list(Request $request, String $entity)
{
if (empty($request->headers->get('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->getDoctrine()->getRepository('App:{$entity}')->findAll());
}
}
And Controller1.php
然后更改为SubscriptionController.php
:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Service\GeneralService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class SubscriptionController extends AbstractController
{
/**
* @Route("/Some/Uri", methods={"GET"})
* @param GeneralService $generalService
* @param Request $request
* @return JsonResponse
*/
public function AuthenticateAPI(GeneralService $generalService, Request $request)
{
$AuthenticatorObject = $generalService->list($request ,'Something');
return $AuthenticatorObject;
}
}
不幸的是,这不起作用并产生以下错误:
无效参数异常
无法确定“App\Controller\Controller1::AuthenticateAPI()”的控制器参数:$generalService 参数的类型暗示为不存在的类或接口:“Service\GeneralService”。
我不明白这个错误从何而来,也不明白为什么会发生。有人可以帮助我理解为什么会出现这种情况以及如何解决它吗?