我需要直接修改$ sf_content什么是最好的解决方法?

时间:2013-01-06 12:26:55

标签: php symfony-1.4

情况:默认情况下只能访问主页面,所有其他页面都需要登录用户。在没有用户的情况下加载模块时,应显示登录模板,而不显示模块。换句话说,$sf_content必须在layout.php中清空,因为布局中存在逻辑,因此不是100%正常。有优雅的方式吗?我不认为帮助者也可以....

3 个答案:

答案 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();
    }
}

为避免布局文件中不必要的重复,您可以使用碎片和部分。