ASP.NET MvcのようにAnnotationに基づくAuthorization FrontController Pluginを実装したかったのです。 フロントコントローラープラグインを作成し、Zend Frameworkが提供するフックの1つにAuthorizationチェックを追加することができたと思います。例:Zend Framework Inspect Controllerクラスのdocblockタグ
class My_Controller_Plugin_Authorize extends Zend_Controller_Plugin_Abstract {
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request){
...
if($user_is_not_loggedin){
goSomeWhereElse();
}
}
}
class MyFancyController extends Zend_Controller_Action{
/**
* @Authorize
*/
public function secretAction(){
...
}
}
は今、私はユーザーが向かっているアクションが許可かないことを要求するかどうかを調べるには、実際の要求されたコントローラでにdocblockを検査する必要があります。 それほど単純ではないことが判明しました。要求オブジェクトは、フックに渡される唯一のリソースです。
私はcontrollerName + "Controller"を実行してコントローラのクラス名を構築できると思っていましたが、クラスがオートロードされないため、コードが見つからず、コードが破損します。
すべてのアイデア?
に、私は実際にZendFrameworkクラスで掘り解決策を見つけた: $ frontController = Zend_Controller_Frontを::のgetInstance(); $ dispatcher = $ frontController-> getDispatcher(); $ controllerClass = $ディスパッチャ - > getControllerClass($リクエスト); $ dispatcher-> loadClass($ controllerClass); $ annotation = new Zend_Reflection_Docblock(新しいZend_Reflection_Class($ controllerClass)); 今のように見えますが、パフォーマンスについては何も分かりません – user711643
反射は遅いですが、「遅い」は相対的です。ベンチマークを実行して問題が発生するかどうかを確認し、問題がある場合はキャッシングを検討してください。 –