Сначала я хотел бы сказать, что я видел здесь другие вопросы, связанные с этой ошибкой, и ни один из них не решил мои проблемы.
У меня есть следующий код для контроллера, чтобы проверить ключ API перед отправкой данных из бэкэнда во внешний интерфейс.
file1Controller.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"}) // "/Some/URI" here
* @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()); //Something here
}
}
Который работает точно так, как задумано (протестировал его с Почтальоном и с моим браузером) для моего простого примера обучения. Я хотел бы обобщить это так, чтобы я мог использовать это в других местах. Почти все должно оставаться прежним, кроме частей, где есть комментарии. Это то, что становится, когда оно становится общим:
General.php
<?php
namespace App;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class General extends AbstractController
{
private $route;
private $entity;
/**
* General constructor.
* @param String $route
* @param String $entity
*/
function __construct(String $route, String $entity)
{
$this->route = $route;
$this->entity = $entity;
}
/**
* @Route({$this->route}, 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:{$this->entity}')->findAll());
}
}
И файл file1Controller.php
меняется на:
<?php
namespace App\Controller;
use App\General;
use Symfony\Component\HttpFoundation\Request;
class SubscriptionController
{
/**
* @return General
*/
public function AuthenticateAPI()
{
$generalObject = new General("/Some/URI", 'Something');
return $generalObject;
}
}
Эта новая установка не дает ошибок компилятора, но, конечно, выдает следующую ошибку (при тестировании):
Невозможно автоматически подключить службу "App \ General": аргумент "$ route" метода "__construct ()" является подсказкой типа "строка", вам следует явно настроить его значение.
Я понимаю, что эта ошибка возникает из-за того, что Symfony не знает, какую строку вводить. Но должен быть способ обойти это? Потому что я не могу указать значение явно в моем случае, потому что я буду делать другой файл file2Controller.php
, который будет точно таким же, но с другими $route
и $entity
.