如何在所有symfony控制器上运行代码?

时间:2017-08-28 05:13:01

标签: symfony

我有RestAPI应用程序我想在调用我的URL后检查令牌。

我的网址是这样的:127.0.0.1:8000/{api_token}/GetUsers

我的api_token就像md5('test'.time())

一样生成

我的控制器现在是:

/**
 * @Route("/{api_token}")
 */
class UserController extends FOSRestController
{
    /**
     * @Rest\Get("/GetUsers")
     */
    public function getAction($api_token, Request $request)
    {
    if($api_token != $this->container->get('api_token')->getApiToken())
            return ['error'=> ['code' => 403, 'message' => 'Authentication failed']];

        //....
    }

    /**
     * @Rest\Post("/RegisterUser")
     */
    public function registerAction($api_token, Request $request)
    {
    if($api_token != $this->container->get('api_token')->getApiToken())
            return ['error'=> ['code' => 403, 'message' => 'Authentication failed']];

        //....
    }
}

这部分代码首先在我的所有操作中运行:

if($api_token != $this->container->get('api_token')->getApiToken())
                return ['error'=> ['code' => 403, 'message' => 'Authentication failed']];

这样做的标准和更好的方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该使用kernel.request事件 更多信息在这里

Symfony events, Kernel-requets

每次Symfony收到请求都会触发此事件,因此您可以将代码放在事件监听器上,并在每次请求时触发它。