2012-06-09 67 views
0

我目前正在使用Symfony2編寫一個REST API。一個月前我開始使用Symfony2,目前我面臨技術難題。在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文件或數據庫中,但這不是一個好的解決方案,因爲它會在我的控制器和持久性之間創建一個不必要的依賴關係。

非常感謝您的幫助。

回答

1

查看AOP Bundle - 它提供了做你想做的手段。