0

状況:デフォルトではメインページのみにアクセスでき、他のすべてのページにはログインユーザーが必要です。モジュールがユーザーなしでロードされる場合、ログインテンプレートが表示され、モジュールは表示されません。つまり、レイアウトにロジックがあるため、100%OKではないを$sf_content空にする必要があります。layout.phpそのためのエレガントな方法はありますか?ヘルパーも大丈夫だとは思わない…。

4

3 に答える 3

1

上記のコメントを完了するには: レイアウトをオーバーライドするにはさまざまな方法があります。次の方法を使用できます。

 setLayout($name) 
 //or using foward, which forwards current action to a new one (without browser redirection)    
 forward($module, $action);

アクションクラス内。フィルター内のレイアウトを変更したい場合は、これに似たものを使用できます。

class yourFilter extends sfFilter {

    public function execute($filterChain) {
        if($yourConditionForOverrideTheDefaultLayout) {
            //here the syntax to change the layout from the filer   
            $actionStack = $this->getContext()->getActionStack();
            $actionStack->getFirstEntry()->getActionInstance()->setLayout('yourLayout');
        }
        $filterChain->execute();
    }
}

レイアウト ファイルでの不要な重複を避けるために、フラグメントとパーシャルを使用できます。

于 2013-01-06T21:12:10.663 に答える
1

セキュリティフィルターを確認してください。これは、symfony で設計されたセキュリティの標準的な方法の 1 つです。必要な機能を備えた独自の SecurityFilter クラスを実装することもできます。

http://symfony.com/legacy/doc/reference/1_4/en/12-Filters#chapter_12_security

于 2013-01-06T12:34:25.837 に答える
1

sfBasicSecurityFilterデフォルトでは、フィルターによって行われます。適切な構成が必要です。Jobeet チュートリアルのこの部分を読んでください。sfDoctrineGuardPluginユーザー認証には(またはsfGuardPluginpropel を使用している場合は) を使用する必要があります。

于 2013-01-06T12:58:12.440 に答える