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

时间:2012-06-09 12:16:36

标签: php api symfony

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

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

但是我想要一些更具可定制性和可扩展性的东西,我想为每个控制器设置他们自己的限制,这样我就可以轻松控制和更改每个控制器的API速率限制。我的想法是使用类似于JMSSecurityExtraBundle可以使用的注释,并在每个控制器的顶部指定类似:

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

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

参见AOP Bundle - 它提供了做你想做的事情的方法。