2012-08-12 51 views
3

我有一个Symfony2 Web应用程序,它需要用户登录执行此类有用的操作。在Symfony中,您可以将链接指向登录页面,然后框架处理的安全性完成剩下的工作。您必须在security.yml配置文件中定义登录页面的路由。Symfony2:从每个页面登录

我想知道,如果是有可能如何让用户登录网站的每个页面(例如,通过将在页面顶部的登录表单)。这将节省页面加载并且不会打扰用户。

在此先感谢

回答

8

最好的办法是让所有的模板扩展一个基本模板。即,在所有的枝条模板有类似

{% extends 'YourBundle::base.html.twig' %} 

在base.html.twig呈现控制器,它呈现的登录表单。要做到这一点,在base.html.twig做这样的事情:

{% render "YourBundle:Security:loginForm" %} 

然后创建一个控制器动作,这样的:在你的loginForm.html.twig

public function loginFormAction() 
{ 
    $loginForm = //create the form 
    return $this->render('YourBundle:Security:loginForm.html.twig', array(
     'form' => $loginForm, 
    } 
} 

最后呈现形式。

+0

这不提供这样的安全问题吗? – JeanValjean 2012-08-12 10:39:26

+0

?对不起,我不明白你的意思? – 2012-08-12 10:58:19

+0

我只想知道在做解决方案时是否存在这样的安全隐患。我猜不是,因为我正在渲染一个应该安全的控制器。但是,如果我想使用安全连接(https)登录页面,则还必须为呈现登录表单的所有页面使用安全连接。不是吗? – JeanValjean 2012-08-12 11:03:23

1

Symfony2防火墙在您在security.yml中定义的登录操作中使用_username, _password, _remember_me and _target_path

你可以在你想要的每个页面上(例如在页眉中)放置一个表单(使用formBuilder,formType或直接到你的模板中的字段,由你决定),使用这些表单名称并将它们发送给你登录操作。 Symfony会自动处理,并为您休息!