状況:デフォルトではメインページのみにアクセスでき、他のすべてのページにはログインユーザーが必要です。モジュールがユーザーなしでロードされる場合、ログインテンプレートが表示され、モジュールは表示されません。つまり、レイアウトにロジックがあるため、100%OKではないを$sf_content
空にする必要があります。layout.php
そのためのエレガントな方法はありますか?ヘルパーも大丈夫だとは思わない…。
質問する
708 次
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
ユーザー認証には(またはsfGuardPlugin
propel を使用している場合は) を使用する必要があります。
于 2013-01-06T12:58:12.440 に答える