6

我正在尝试根据 symfony.com 的教程使用 symfony 4 创建用户登录。

我使用了带有以下代码的基本 services.yaml 文件。

https://symfony.com/doc/current/security/form_login_setup.html

public function loginAction(Request $request, \Twig_Environment $twigRenderer,AuthenticationUtils $authUtils)
{

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

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


    return new response($twigRenderer->render('security/login.html.twig', array(
        'last_username' => $lastUsername,
        'error'         => $error,
        )
    ));
}

错误:

控制器“App\Controller\SecurityController::loginAction()”要求您为“$authUtils”参数提供一个值。参数可以为空并且没有提供空值,没有提供默认值,或者因为在此参数之后有一个非可选参数。

我不知道如何解决这个问题。有人有建议吗?

4

7 回答 7

1

我遇到了同样的问题..尝试运行命令:

composer require security
于 2017-12-07T17:57:09.593 回答
0

我的解决方案(使用 Symfony 4.0)是完全完成Symfony 安全文档的步骤。跟随他们,你很有可能会成功。

我知道我们不应该只是共享一个链接,但在这种情况下,没有一个特定的步骤可以复制到这个答案,为了得到正确的结果,请全部执行。

于 2018-03-18T16:22:20.667 回答
0

他们在这里的关键是让您的控制器标记为controller.service_arguments

所以在注册控制器服务时,你应该有类似的东西:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    My\Namespace\Controller\LoginController:
        tags: ['controller.service_arguments']

就个人而言,我更喜欢一次注册所有控制器,例如。像这样:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: true

    controllers:
        resource: '%kernel.project_dir%/src/**/Application/Controller/*'
        namespace: 'My\Namespace\'
        tags: ['controller.service_arguments']
于 2019-06-03T10:36:25.843 回答
0

将这些添加到您的 services.yml 以解决该错误:

AppBundle\Controller\:
    resource: '../../src/AppBundle/Controller'
    public: true
    tags: ['controller.service_arguments']

看看这个问题: simple login form using symfony

希望这有帮助。

于 2017-12-12T03:14:06.190 回答
0

我有点晚了,但仍然在这里添加以供其他人参考。

请添加autowire: true到您的控制器服务声明中。Symfony 会自动为你注入方法的参数。

于 2018-03-08T16:14:00.220 回答
0

你必须检查你的 services.yml 文件并确保你的包被标记。就我而言,我有一个名为 AdminBundle 的包,我的 services.yml 看起来像这样:

AdminBundle\:
    resource: '../../src/AdminBundle/*'
    exclude: '../../src/AdminBundle/{Entity,Repository,Tests}'

AdminBundle\Controller\:
    resource: '../../src/AdminBundle/Controller'
    public: true
    tags: ['controller.service_arguments']
于 2018-10-07T16:05:26.003 回答
-2

请这样做它对我有用

$authUtils = $this->get('security.authentication_utils');
于 2018-07-17T13:43:22.137 回答