登录表单不起作用,在Symfony2中提交后再次加载

时间:2016-06-08 22:23:52

标签: php symfony

我正在Symfony2中创建一个博客应用程序,我想创建一个登录表单。 到目前为止我做了什么:

  1. 将我的用户实体与安全相关联
  2. 制作表格
  3. 已配置路由和security.yml。
  4. 它只是不想工作。当我尝试提交用户名和密码时,我得到的只是一个登录表单。我认为路线有问题,但我无法解决这个问题。谁能指出我在哪里有错误?

    SecurityController:

    <?php
    
    namespace BlogBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Component\HttpFoundation\Request;
    
    
    class SecurityController extends Controller
    {
    /**
     * @Route("login", name="login")
     */
    public function loginAction()
    {
        $authUtil = $this->get('security.authentication_utils');
    
        // error content
        $error = $authUtil->getLastAuthenticationError();
    
        // username entered by the user
        $lastUsername = $authUtil->getLastUsername();
    
        return $this->render('BlogBundle:Default:login.html.twig', array(
                'error' => $error,
                'last_username' => $lastUsername)
        );
    }
    
    }
    

    security.yml:

    security:
    
    providers:
        db_provider:
            entity:
                class: BlogBundle:Users
                property: username
    
    firewalls:
    
        main:
           anonymous: ~
           form_login:
                provider: db_provider
                login_path: login
                check_path: login
    

    登录表单:

    <form role="form" action="{{ path('login') }}" method="post">
    <div class="form-group">
         <input class="form-control" id="username" placeholder="Username" name="_username" type="text" autofocus>
    </div>
    <div class="form-group">
         <input class="form-control" id="password" placeholder="Password" name="_password" type="password" value="">
    </div>
         <button type="submit" class="btn btn-lg btn-success btn-block">Login</button>
    

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

为什么在已经有捆绑的情况下重新发明轮子。查看FOSUserBundle。它是一个很棒的捆绑包,提供灵活的安全框架,允许您从配置或数据库加载用户。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html 希望它有所帮助!

答案 2 :(得分:1)

好吧,所以我似乎找到了解决方案。 你看,当你在Symfony 2中阅读制作表单的教程时,它会告诉你为login_path和check_path创建相同的路径。 http://symfony.com/doc/2.8/cookbook/security/form_login_setup.html

我没有意识到这条路线与SecurityController中的loginAction相关联,因此每当我尝试提交表单时,它都会返回到loginAction,我在那里渲染登录页面。

解决方案是在SecurityController中创建另一个方法:

 /**
 * @Route("login_check", name="login_check")
 */
public function loginCheck(){

}

我把它留空了,但如果你愿意,你可以放一些异常处理程序,如:

throw new \Exception("Oops")

当然,我将security.yml中的post post action和check_path更改为 login_check