在 Symfony2 控制器中注入基于注释的需求


Inject a annotation-based requirement in a Symfony2 controller

我目前正在使用Symfony2编写REST API。一个月前我开始使用Symfony2,目前我正面临技术难题。

在编写我的 API 时,我想按 IP 地址或用户对 API 调用进行速率限制(即,如果用户登录,我使用他的 ID、时间戳和他的 IP 地址来跟踪他的连接,如果他没有登录,我只需将他的 IP 地址和时间戳保存在我的数据库中)。为此,我编写了一个实现VoterInterface的服务,每当用户访问控制器并检查他是否未超过每小时或按天的API速率限制(它们都是硬编码的)时,Symfony都会调用该服务。到目前为止,这工作正常。

但是我想要一些更可定制和可扩展的东西,我想为每个控制器设置自己的限制,以便我可以轻松控制和更改每个控制器的 API 速率限制。我的想法是使用类似于您可以与JMSSecurityExtraBundle一起使用的注释,并在每个控制器的顶部指定如下内容:

/**
 * My API - UserController::registerAction
 *
 * @RateLimit(hour="200", day="2000")
 */
public function registerAction($format)

然后在我的速率限制器类中检索注释信息以填充限制信息。问题是我没有设法找到方法,我需要一些帮助。我的解决方案有效,我只需要更强大的东西。我已经考虑过将这些信息存储在 YAML 文件或数据库中,但这对我来说不是一个好的解决方案,因为它在我的控制器和持久性之间创建了不必要的依赖关系。

提前感谢您的帮助。

查看 AOP 捆绑包 — 它提供了做你想做的事的方法。