繁体   English   中英

学说注释不适用于PHP 7.0

[英]Doctrine annotation not working on PHP 7.0

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

我正在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 ...')#2 {main}放在/ home / clients / fb3f5a508aeeb6d39e6d7e1e47bda9ac / vendor / doctrine中/Doctrine/Common/Annotations/AnnotationRegistry.php行117

我发现这些链接似乎很有帮助: -Symfony致命错误-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"
},

我究竟做错了什么? 有任何想法吗?

谢谢!

如果您将平台用作“ 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",
        ...

如果严格定义所有版本,将很容易找到特定于版本的错误。

这对我有好处。

platform设置将被忽略,因为您没有将其包装在config节点中。 以下配置将起作用:

{
    "config": {
        "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"
    }
}

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

php --version

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

composer config platform.php 7.0.17

然后查看作曲家是否可以降级该软件包(并且只有该软件包,我们不需要无关的更新; dry-run =只看,不做)

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

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

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

解决了。

我运行时发现问题已解决:

composer update --with-dependencies

这引入了我仅运行composer update时遗漏的缺少的doctrine/annotations依赖项

... 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 ...

问题解决了! :-)我从Doctrine网站下载了注释的1.2.7版本,并且可以正常工作。 http://www.doctrine-project.org/projects/annotations.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM