【问题标题】:Symfony 3 FOSUSERBUNDLE UPDATE broke my appSymfony 3 FOSUSERBUNDLE UPDATE 破坏了我的应用程序
【发布时间】:2017-04-20 06:19:36
【问题描述】:

我正在使用 Symfony 3.0.9 和 FosUserBundle 来构建我的应用程序。我最近做了一个作曲家更新,现在我无法通过 UserManager 或命令行创建用户。错误是Integrity constraint violation: 1048 Column 'salt' cannot be null。即使我在构造方法中显式调用 parent::__construct() 也会发生此错误,如下所示:

/**
 * constructor.
 */
public function __construct()
{
    parent::__construct();
}

如果我像$user->setSalt('87234hjjdwshjdsjkds')这样调用setSalt方法也会失败

解决这个问题的所有努力都失败了,所以我开始密切关注我的 composer update 命令,这是一些输出:

Updating dependencies (including require-dev)

Removing twig/twig (v1.24.1)
Installing twig/twig (v1.28.2)
   Loading from cache

Removing symfony/polyfill-util (v1.2.0)
Installing symfony/polyfill-util (v1.3.0)
   Loading from cache
  
  ...

Removing symfony/polyfill-intl-icu (v1.2.0)
Installing symfony/polyfill-intl-icu (v1.3.0)
   Loading from cache

Removing psr/log (1.0.0)
Installing psr/log (1.0.2)
   Loading from cache

Removing doctrine/cache (v1.6.0)
Installing doctrine/cache (v1.6.1)
   Loading from cache

   ...

Removing doctrine/orm (v2.5.4)
Installing doctrine/orm (v2.5.5)
   Loading from cache


Removing sensiolabs/security-checker (v3.0.2)
Installing sensiolabs/security-checker (v4.0.0)
   Loading from cache

Removing nikic/php-parser (v2.1.0)
Installing nikic/php-parser (v2.1.1)
   Loading from cache

	...

Removing doctrine/doctrine-migrations-bundle (1.1.1)
Installing doctrine/doctrine-migrations-bundle (v1.2.0)
   Loading from cache
   
   ...
   
Removing phpspec/phpspec (2.5.1)
Installing phpspec/phpspec (2.5.5)
   Loading from cache

Removing doctrine/data-fixtures (v1.2.1)
Installing doctrine/data-fixtures (v1.2.2)
   Loading from cache

Updating friendsofsymfony/user-bundle dev-master (147ca68 => 7261f7a)
   Checking out 7261f7aa143b4bfdb0b7ddc5df208067fa7be698

如您所见,FOSUSERBUNDLE 已更新。

恢复作曲家更新,删除我的供应商目录并运行作曲家安装修复它。这将其归结为更新。这就是问题所在。

如果有人知道我如何更新并且仍然有一个可以工作的应用程序,我将感谢您的 cmets 和反馈。

【问题讨论】:

  • 您是否更新了架构?据我记得,之前的更新删除了一些 FOSUser 实体字段,也许您尝试在不再存在的字段上插入数据。
  • 感谢@BartBartoman,我将运行“composer update”并重试。
  • 是的!那行得通!在作曲家更新后,我更新了架构并更新了用户表。这太棒了。谢谢
  • 不客气。作为一个快速提示,每次您再次开始处理项目时,只需花时间拉取、更新依赖项和更新架构。

标签: php doctrine-orm composer-php symfony fosuserbundle


【解决方案1】:

1) 如果您想在第 2 版中使用 FOSUserBundle,则没有最终/稳定版本 - 因此您总是需要在 dev/master 分支中进行重大更改。

2) 几天后至少有一个 2.0.0 Beta 版本,我强烈建议在您的情况下使用它:Check it here.

3) 对用户数据库架构进行了一些更改,例如删除了几个未使用的字段。并且盐场发生了变化 - 所以在你的情况下 - 据我所知,可能缺少的是更新你的数据库架构(如果你正在使用 Doctrine 调用 bin/console doctrine:schema:update --force)。

有关详细信息,请参阅例如2.0.0 beta 的发行说明:

[BC break] User 类的 salt 字段现在可以为空。

【讨论】:

  • 更新架构解决了我最初的作曲家更新后的问题。
【解决方案2】:

如果您想更新除用户捆绑之外的所有内容

使用 composer,您可以将包名称作为参数传递给 composer update 命令,如下所示:

composer update vendor1/package1 vendor2/package2

因此,您可以创建除 user-bundle 之外的所有包的长字符串。 您可以从

获得的所有过期软件包的列表
composer show -o --name-only

命令输出。

此处的选项-o 仅适用于可更新的过时软件包。

选项--name-only 显然只显示包名,没有版本和描述。

所以,在类 unix 的操作系统上,你可以运行类似的东西

composer show -o --name-only | grep -v 'friendsofsymfony/user-bundle' | xargs composer update

More about Composer CLI

【讨论】:

  • 谢谢尼基塔。这非常方便,因为至少我可以选择让其他所有内容保持最新。关于如何更可靠地确认此错误并向开发人员提供详细信息的任何想法?
  • 好吧,你将你的包更新到下一个主要版本(根据你的作曲家输出v2.0.0-beta1),所以主要意味着BC中断。如此处所述 - github.com/FriendsOfSymfony/FOSUserBundle/blob/master/…[BC break] The salt field of the User class is now nullable。如果您在显式设置 salt 时遇到问题,请提供不起作用的完整代码 sn-p。
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2018-12-16
  • 1970-01-01
相关资源
最近更新 更多