如何选择在Symfony 2上加载哪个模板

时间:2013-01-12 21:10:15

标签: symfony symfony1

这可能是一个不好的方法问题,而不是技术问题,但无论如何,你的建议非常有价值。

我的网站有两个受保护的页面, / home / popup ,每个页面都需要一个已登录的用户。您可能知道Symfony会自动将未登录用户重定向到您的login_path(在我的情况下只是 / login ),所以没关系。问题是,尝试从网址 / home 登录的用户需要查看模板调用 normal_login.html.php 以及尝试使用<登录的用户< strong> / popup 会看到 popup_login.html.php

我的 / login 页面由我的用户控制器管理,在那里我只是在寻找标题引用来查看用户是否来自 / popup

    $previousUrl = $this->getRequest()->headers->get('referer'); 
    if(strpos($previousUrl, $this->generateUrl('done_punctis_popup'))) $popupref = true;

脚本完成后,我只检查 popupref 标志,如果是真的我只返回弹出模板,如果没有,我会返回普通模板。

到目前为止,所有非常好的工作(测试过)。然后,Symfony框架处理来自任何模板的表单提交,并登录用户将其重定向到原始的受保护页面 / home / popup

您可能会问哪个错误?好了,因为系统基于引用值,如果用户在登录表单中没有出错,一切正常,但如果输入信息不正确(密码或用户名不正确),check_login脚本会将用户重定向回这次登录控制器只有问题,引用者不再是 / home / popup ,而是 / login_check !!所以现在我的控制器不知道用户来自哪里,所以它不知道返回哪个模板。


您怎么看?

编辑(请求)

控制器

public function loginAction( )
{
    $popupref = false;
    $previousUrl = $this->getRequest()->headers->get('referer'); 
    if(strpos($previousUrl, $this->generateUrl('done_punctis_popup'))) $popupref = true;

    // Se è già loggato non deve vedere questa pagina quindi redirect
    if( $this->get('security.context')->isGranted('ROLE_USER') && !$popupref)
        return $this->redirect( $this->generateUrl('done_punctis_user_homepage'));


    $request = $this->getRequest();
    $session = $request->getSession();

    // verifica di eventuali errori
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
    } else {
        $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        $session->remove(SecurityContext::AUTHENTICATION_ERROR);
    }

    if(!$popupref) {
        return $this->render('DonePunctisBundle:Pages:login.html.php', array(
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error'         => $error
            ));
    } else {
        return $this->render('DonePunctisBundle:Popup:popupSignup.html.php', array(
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error'         => $error
           ));
    }

}

安全

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        remember_me:
            key: %secret%
            lifetime: 3600
            path: /
            domain: ~
        pattern: ^/
        anonymous: ~
        form_login:
            login_path: /login
            check_path: /login_check
        logout:
            path:   /logout
            target: /

在我改变一些名字的问题只是因为有一个更明确的解释,/ home实际上不存在,实际上所有需要授权的东西都使用普通模板,只需来自/ popup的调用需要弹出模板

PS。来自/ home或/ popup的用户是相同的,/ home和/ popup只是登录我网站的两种不同方式。

0 个答案:

没有答案