0

情况:默认情况下只有主页面可以访问,所有其他页面都需要登录用户。当一个模块在没有用户的情况下加载时,应该显示一个登录模板,并且没有模块。换句话说,$sf_content必须清空layout.php其中不是 100% 好的,因为布局中有逻辑。有没有优雅的方法?我觉得帮手也不好....

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

默认情况下,它是由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 回答