情况:默认情况下只能访问主页面,所有其他页面都需要登录用户。在没有用户的情况下加载模块时,应显示登录模板,而不显示模块。换句话说,$sf_content
必须在layout.php
中清空,因为布局中存在逻辑,因此不是100%正常。有优雅的方式吗?我不认为帮助者也可以....
答案 0 :(得分:1)
检查安全过滤器,这是symfony中设计安全性的一种标准方式。 您甚至可以使用所需的功能实现自己的SecurityFilter类。
http://symfony.com/legacy/doc/reference/1_4/en/12-Filters#chapter_12_security
答案 1 :(得分:1)
sfBasicSecurityFilter
过滤器默认为您完成。你只需要一个好的配置。阅读Jobeet教程的this part。您应该使用sfDoctrineGuardPlugin
(或sfGuardPlugin
,如果您使用propell)进行用户身份验证。
答案 2 :(得分: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();
}
}
为避免布局文件中不必要的重复,您可以使用碎片和部分。