0

我正在研究这种方法:

public function loginAction(Request $request, Security $security)
{
    $session = $request->getSession();
    $session->remove('admin_project_id');

    if ($security->has(Security::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
    } else {
        $error = $session->get(Security::AUTHENTICATION_ERROR);
        $session->remove(Security::AUTHENTICATION_ERROR);
    }

    return $this->render('PDOneBundle:Login:index.html.twig',
        array_merge($this->defaultViewParams(), array(
            'last_username' => $session->get(Security::LAST_USERNAME),
            'error'         => $error,
            'include_sidebar' => false,
            )
        )
    );
}

但是当它被调用时我得到了这个错误:

控制器 "GroupDCA\PDOneBundle\Controller\LoginController::loginAction()" 要求您为 "$security" 参数提供一个值(因为没有默认值或者因为在此参数之后有一个非可选参数)。

该参数的默认值应该是什么?我使用的方式对吗?

4

1 回答 1

4

首先,您不需要将 $security 作为参数传递。在您使用安全性的那一行,您实际上必须访问 $request 并查看其属性是否有错误。

其次,我看到您将问题标记为symfony 2.7,并且从版本 @2.6 开始,引入了一种新的、简短的登录方式:

public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');

    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render(
        'security/login.html.twig',
        array(
            // last username entered by the user
            'last_username' => $lastUsername,
            'error'         => $error,
        )
    );
}

您可以从这段代码的获取位置阅读更多信息:如何构建传统登录表单

于 2015-04-14T19:50:13.657 回答