可捕获的致命错误:传递给UsernamePasswordToken :: __ construct()的参数4必须是一个数组,给定null

时间:2014-06-03 07:33:04

标签: php symfony login

登录我的Symfony应用程序时(使用正确的用户名和密码),我收到以下错误:

  

ContextErrorException:Catchable Fatal Error:传递给Symfony \ Component \ Security \ Core \ Authentication \ Token \ UsernamePasswordToken :: __ construct()的参数4必须是一个数组,null,在D:\ xampp \ htdocs \ essweb \中调用第96行上的vendor \ symfony \ symfony \ src \ Symfony \ Component \ Security \ Core \ Authentication \ Provider \ UserAuthenticationProvider.php,在D:\ xampp \ htdocs \ essweb \ vendor \ symfony \ symfony \ src \ Symfony \ Component \中定义Security \ Core \ Authentication \ Token \ UsernamePasswordToken.php第36行

Security.yml

firewalls:
        admin_area:
            pattern:    ^/
            anonymous: ~
            form_login:
                login_path:  /
                check_path:  /login_check
                default_target_path: /user
                failure_path: /
                #username_parameter: username
                #password_parameter: password
                remember_me: true

            remember_me:
                key: "%secret%"
                lifetime: 31536000
                path: /
                domain: ~
                always_remember_me: true
            logout:
                path:   /logout
                target: /  

更新:

登录表单

<form class="form-signin form-group" action="{{ path('login_check') }}" method="post">
Username: <input type="text" class="form-control" name="_username" placeholder="Username" value="{{ last_username }}" required="required">
Password: <input type="text" class="form-control" name="_password" placeholder="" value="{{ last_username }}" required="required">
<button class="btn btn-sm btn-primary btn-block" type="submit">Sign in</button>

3 个答案:

答案 0 :(得分:30)

基本上,错误信息的内容是:

UsernamePasswordToken::__construct()的第四个参数应该是一个数组,但它是null。它在UserAuthenticationProvider at line 96中被调用。

如果您查看该代码,您会发现UsernamePasswordToken::__construct()的第4个参数是$roles。所以这应该是一个数组,但它取而代之的是null

我猜测您有written your own User entity,并且您的用户实体的getRoles()方法正在返回null而不是一组角色。所以只需将该方法更改为:

/**
 * Returns the roles granted to the user.
 * 
 * @return Role[] The user roles
 */
public function getRoles()
{
    return array('ROLE_USER');
}

当然,只要getRoles()返回字符串数组或Role个对象,实际代码可能会有所不同(您可能希望将用户角色存储在数据库中)。

答案 1 :(得分:4)

我修复此错误,以便返回角色:

public function getRoles()
{
    return $this->roles->toArray();

}

答案 2 :(得分:0)

正在捕获此错误,因为Roles属性当前提供的值为null,但是您必须为其提供一个角色数组,因此要解决该问题,只需返回Roles属性:

public function getRoles()
{
    return $this->roles;
}