在FOS用户创建时,列'salt'不能为空

dMe*_*dia 3 symfony doctrine-orm fosuserbundle

它工作了一段时间,但现在由于某种原因它产生了异常.我有自定义用户实体,它扩展了FOS用户:

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
...
}
Run Code Online (Sandbox Code Playgroud)

我的自定义类中没有setSalt().正如我在转储SQL查询中看到的那样,其他非自定义字段(email_canonical,enabled,password,...)设置正确.我还能检查什么?

UPDATE

我做了作曲家更新.这是我的composer.json

"require": {
    "php": ">=5.5.9",
    "symfony/symfony": "3.2.*",
    "doctrine/orm": "^2.5",
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/doctrine-cache-bundle": "^1.2",
    "symfony/swiftmailer-bundle": "^2.3",
    "symfony/monolog-bundle": "^2.8",
    "symfony/polyfill-apcu": "^1.0",
    "sensio/distribution-bundle": "^5.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "^2.0",
    "friendsofsymfony/user-bundle": "~2.0@dev",
    "hwi/oauth-bundle": "^0.5.1",
    "twig/extensions": "^1.4"
},
Run Code Online (Sandbox Code Playgroud)

COi*_*Oil 8

您必须删除架构并再次重新创建它.您的salt列应该被允许为null,因为在使用bcryp算法时它确实为null,因为salt直接包含在密码(hash)中.此外是映射声明:

<field name="salt" column="salt" type="string" nullable="true" /> 
Run Code Online (Sandbox Code Playgroud)

PS:和其他建议,更新所有捆绑,清除缓存,数据库及其数据......


更新:

根据dMedia,他们在最近的更新中更改了学说映射(2016年11月)

https://github.com/FriendsOfSymfony/FOSUserBundle/commit/a9a08c2daf3db38697a8bd4b6e00f42c9a33dd79#diff-36e2e6fca6f6ce7118933033f9ce8bff

  • 确实.他们更改了学说映射https://github.com/FriendsOfSymfony/FOSUserBundle/commit/a9a08c2daf3db38697a8bd4b6e00f42c9a33dd79#diff-36e2e6fca6f6ce7118933033f9ce8bff.`php bin/console doctrine:schema:update --force`完成了这项工作. (2认同)