情况:默认情况下只有主页面可以访问,所有其他页面都需要登录用户。当一个模块在没有用户的情况下加载时,应该显示一个登录模板,并且没有模块。换句话说,$sf_content
必须清空layout.php
其中不是 100% 好的,因为布局中有逻辑。有没有优雅的方法?我觉得帮手也不好....
问问题
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
默认情况下,它是由sfBasicSecurityFilter
过滤器为您完成的。你只需要一个好的配置。阅读Jobeet 教程的这一部分。您应该使用sfDoctrineGuardPlugin
(或者sfGuardPlugin
如果您使用推进)进行用户身份验证。
于 2013-01-06T12:58:12.440 回答
1
查看安全过滤器,这是在 symfony 中设计安全性的一种标准方式。您甚至可以使用您想要的功能实现您自己的 SecurityFilter 类。
http://symfony.com/legacy/doc/reference/1_4/en/12-Filters#chapter_12_security
于 2013-01-06T12:34:25.837 回答