Doctrine注释不适用于PHP 7.0

时间:2017-08-30 22:13:04

标签: php symfony doctrine-orm annotations

我遇到了一个看起来很小的问题,但我无法解决问题。 它可能非常愚蠢,但我找不到任何解决方案。

我正在PC上开发一个带有PHP 7.1的Symfony 3应用程序。一切都运作良好。我试图将它上传到使用PHP 7.0的主机服务器上。

当我启动网站时,收到以下错误消息:

  

致命错误:未捕获TypeError:Doctrine \ Common \ Annotations \ AnnotationRegistry :: registerLoader()的返回值必须是Doctrine \ Common \ Annotations \ void的实例,无法在/ home / clients / fb3f5a508aeeb6d39e6d7e1e47bda9ac / vendor / doctrine中返回/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:117堆栈跟踪:#0 /home/clients/fb3f5a508aeeb6d39e6d7e1e47bda9ac/app/autoload.php(9):Doctrine \ Common \ Annotations \ AnnotationRegistry :: registerLoader(Array) #1 /home/clients/fb3f5a508aeeb6d39e6d7e1e47bda9ac/web/app.php(6):require(' / home / clients / f ...')/ home / clients /中抛出#2 {main}第117行的fb3f5a508aeeb6d39e6d7e47bda9ac / vendor / doctrine / annotations / lib / Doctrine / Common / Annotations / AnnotationRegistry.php

我找到了那些似乎非常有用的链接:   - Symfony fatal error   - http://www.doctrine-project.org/2017/07/25/php-7.1-requirement-and-composer.html

但是,我无法解决这个问题。我找不到哪个版本需要与PHP 7.0兼容...

在我的作曲家json配置文件中,我有:

"platform": {
    "php": "7.0"
},
"require": {
    "php": ">=5.5.9",
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/doctrine-cache-bundle": "^1.2",
    "doctrine/orm": "^2.5",
    "incenteev/composer-parameter-handler": "^2.0",
    "misd/phone-number-bundle": "^1.2",
    "sensio/distribution-bundle": "^5.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "symfony/monolog-bundle": "^3.0.2",
    "symfony/polyfill-apcu": "^1.0",
    "symfony/swiftmailer-bundle": "^2.3.10",
    "symfony/symfony": "3.3.*",
    "twig/twig": "^1.0||^2.0"
},

我做错了什么?有什么想法吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

如果你使用平台作为" php":" 7.0"然后你会尝试这个

  "require": {
        "php" : ">=7.0.21",
        "symfony/symfony" : "3.3.4",
        "doctrine/orm" : "2.5.10",
        "doctrine/doctrine-bundle" : "1.6.8",
        "doctrine/doctrine-cache-bundle" : "1.3.0",
        ...

如果你严格定义所有版本,很容易找到特定版本的bug。

这对我有用。

答案 1 :(得分:4)

您的outerJoin()设置被忽略,因为您没有将其包装在platform节点内。以下配置将起作用:

config

答案 2 :(得分:1)

正确的方法是检查你有哪个php:

php --version

然后告诉作曲家自动黑名单不匹配的版本

composer config platform.php 7.0.17

然后看看作曲家是否可以降级该套餐(只有那个套餐,我们不想要不相关的更新;干运行=只看,不做)

composer update doctrine/common --with-dependencies --dry-run

在我的情况下,作曲家告诉我,我们还需要降级另一个包,所以我终于做了

composer update doctrine/common symfony/dom-crawler --with-dependencies

成功了。

答案 3 :(得分:1)

我跑步时发现问题已解决:

composer update --with-dependencies

这导致了当我仅运行doctrine/annotations

时遗漏的composer update依赖项

... Package operations: 1 install, 0 updates, 0 removals - Installing doctrine/annotations (1.7.x-dev 232c5da): Cloning 232c5da390 from cache Writing lock file Generating autoload files ...

答案 4 :(得分:0)

问题解决了! :-)我从Doctrine网站下载了1.2.7版本的注释,但它确实有效。 http://www.doctrine-project.org/projects/annotations.html

奇怪的是,在他们的网站上,他们说最后一个版本是1.2.7,但我可以用Composer下载1.4.0版本......