3

私は Yii のチュートリアル ブックを読んでいて、現在フィルターについて学んでいます。フィルターは、一般的にコントローラーに適用することも、特定のアクションのみに適用することもできます。

私が取り組んでいる例は、新しい問題を作成することです。各課題は 1 つのプロジェクトに属しているためproject_id、ページに確実に渡されるようにフィルターを追加しissue/createます。issue/createを必要とするページは だけなのでproject_id、フィルタを 1 つのアクションに適用します。

public function filters(){
    return array(
        'accessControl', // perform access control for CRUD operations
            'projectContext + create',//check to ensure valid project context
    );
}

私の質問は次のとおりです。フィルターがコントローラーの単一のアクションにのみ適用される場合、filterProjectContext()コードを直接actionCreate()関数に入れてみませんか?

4

1 に答える 1

5

yii docs 、および他のフレームワークでの私の経験によると、フィルターはアクションと結合することを意図していません。$_REQUESTむしろ、フィルターを使用すると、アクションに到達する前に、値などの PHP グローバルにアクセスできます。たとえば、url パラメーターが特定の値で渡された場合にすべての翻訳済みテキストを強調表示するプロジェクトに取り組みました。コントローラーでこれを行うこともできましたが、フィルター内でビジネス ルールを実装する方がよいと感じました。フィルターは次のようになりました。

// Symfony code, but should demonstrate the idea
if ($context->getRequest()->getParameter('highlightTranslations') === 'y') {
    // Tell translator API to highlight any subsequent translations
}

フィルタの優れた点は、どのアクションが要求されたかに関係なく、このコードが実行されることです。私の提案は、フィルタ ロジックとアクション ロジックを混同しないことです。

于 2012-04-25T23:48:58.717 に答える