Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Symfony 4中泛化ApiKeyAuthenticator?_Symfony_Symfony4 - Fatal编程技术网

如何在Symfony 4中泛化ApiKeyAuthenticator?

如何在Symfony 4中泛化ApiKeyAuthenticator?,symfony,symfony4,Symfony,Symfony4,我有以下代码,在将数据发送到前端之前检查API密钥是否正确 file1Controller.php <?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request

我有以下代码,在将数据发送到前端之前检查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
    }
}
<?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 $request;
    private $route;
    private $entity;

    /**
     * ApiKeyAuthenticator constructor.
     * @param Request $request
     * @param String $route
     * @param String $entity
     */
    function __construct(Request $request, String $route, String $entity)
    {
        $this->request = $request;
        $this->route = $route;
        $this->entity = $entity;
    }

    /**
     * @Route({$route}, methods={"GET"}) //notice here
     * @return JsonResponse
     */
    public function list()
    {
        if (empty($this->request->headers->get('api-key'))) {
            return new JsonResponse(['error' => 'Please provide an API_key'], 401);
        }

        if ($this->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()); //notice here
    }

}
然后我将
file1Controller.php
的代码更改为:

<?php


namespace App\Controller;

require(__DIR__.'/../General.php'); //note that there's no error accessing the file here
use Symfony\Component\HttpFoundation\Request;

class file1Controller
{

    /**
     * @param Request $request
     */
    public function AuthenticateAPI(Request $request)
    {
        $AuthenticatorObject = new ApiKeyAuthenticator($request, "/Some/URI", 'Something'); //getting undefiend class 
        return $AuthenticatorObject;
    }

}

在Symfony中,您不应该这样调用控制器:

require(__DIR__.'/../General.php'); //note that there's no error accessing the file here
请查看Symfony文档中定义和访问控制器作为服务:


邮递员本身可能有问题吗?@Doesitmatter没有。代码甚至没有在PHPStorm中编译。src文件夹中的所有内容都将使用
App
命名空间。例如,如果存在
HelloController
,则应使用
use App\Controller\HelloController
General.php
文件在哪里?