Zend Framework 3中的Doctrine2更新导致AnnotationRegistry registerLoader错误 - php

我正在基于Zend Framework 3.0的CMS上使用Doctrine管理DBI。使用composer管理软件包时我有什么问题?最近,我将所有软件包更新为最新版本,并将其发送到服务器,其他文件中没有任何更改。更新后,我的网站显示以下错误:

致命错误:未捕获的TypeError:Doctrine \ Common \ Annotations \ AnnotationRegistry :: registerLoader()的返回值必须是Doctrine \ Common \ Annotations \ void的实例,在/ home / platne / serwer18346 / vendor / doctrine / annotations /中均未返回lib / Doctrine / Common / Annotations / AnnotationRegistry.php:117堆栈跟踪:#0 /home/platne/serwer18346/vendor/doctrine/doctrine-module/src/DoctrineModule/Module.php(57):Doctrine \ Common \ Annotations \ AnnotationRegistry :: registerLoader(Object(Closure))#1 /home/platne/serwer18346/vendor/zendframework/zend-modulemanager/src/Listener/InitTrigger.php(33):DoctrineModule \ Module-> init(Object(Zend \ ModuleManager) \ ModuleManager))#2 /home/platne/serwer18346/vendor/zendframework/zend-eventmanager/src/EventManager.php(322):Zend \ ModuleManager \ Listener \ InitTrigger-> __ invoke(Object(Zend \ ModuleManager \ ModuleEvent)) #3 /home/platne/serwer18346/vendor/zendframework/zend-eventmanager/src/EventManager.php(171):Zend \ EventManager \ EventManager-> triggerListeners(Object(Zend \ M oduleManager \ ModuleEvent))#4 / home / p在117行的/home/platne/serwer18346/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php中

如果需要,一些应用程序代码:
模块:

return [
    'Zend\Router',
    'Zend\Validator',
    'DoctrineModule',
    'DoctrineORMModule',
    'Core',
];

development.local(开发人员模式处于活动状态):

'doctrine' => [
        'connection' => [
            'orm_default' => [
                'driverClass' => Doctrine\DBAL\Driver\PDOMySql\Driver::class,
                'params' => [
                    'host' => '******',
                    'user' => '*******',
                    'password' => '******',
                    'dbname' => '*******',
                    'charset' => 'utf8'
                ]
            ]
        ]
    ]

module.config:

'doctrine' => [
        'driver' => [
            __NAMESPACE__ . '_driver' => [
                'class' => AnnotationDriver::class,
                'cache' => 'array',
                'paths' => [__DIR__.'/../src/Model']
            ],
            'orm_default' => [
                'drivers' => [
                    __NAMESPACE__ . '\Model' => __NAMESPACE__ . '_driver'
                ]
            ]
        ]
    ]

控制器工厂:

public function __invoke(ContainerInterface $container,$requestedName, array $options = null)
{
    $controllerInstance = null;
    switch($requestedName){
        case 'Core\Controller\IndexController': $controllerInstance = $this->_invokeIndex($container); break;
        case 'Core\Controller\PagesController': $controllerInstance = $this->_invokePages($container); break;
    }
    return $controllerInstance;
}

protected function _invokeIndex(ContainerInterface $container)
{
    return new Controller\IndexController(
        $container->get('doctrine.entitymanager.orm_default')
    );
}

protected function _invokePages(ContainerInterface $container)
{
    return new Controller\PagesController(
        $container->get('doctrine.entitymanager.orm_default')
    );
}

控制器父级:

 protected $_entityManager;

    /**
     * AppController constructor.
     * @param EntityManager $entityManager
     */
    public function __construct(EntityManager $entityManager)
    {
        $this->_entityManager = $entityManager;
    }

    /**
     * @return EntityManager
     */
    public function getEntityManager()
    {
        return $this->_entityManager;
    }

如我所说,此代码在更新之前有效。更新后,它会向我显示该错误,而在上传以前的版本后,错误仍然存​​在。我尝试重写代码,但效果相同。

作曲家(无项目数据):

"require": {
    "zendframework/zend-mvc": "*",
    "zendframework/zend-developer-tools": "*",
    "zendframework/zend-session": "*",
    "zendframework/zend-authentication": "*",
    "zfcampus/zf-development-mode": "*",
    "doctrine/doctrine-orm-module": "*"
  },
  "autoload": {
    "psr-4": {
      "Core\\": "module/Core/src/"
    }
  }

参考方案

最新版本的Doctrine\Common\Annotations使用PHP 7.1导致此错误。这就是为什么它将void用作return type的原因。而且PHP 7.0。*不支持它。这是new feature in PHP 7.1

我在使用PHP 7.0的ZF3项目中使用doctrine-orm-module 1.1。而且效果很好。因此,只需将您的doctrine-orm-module版本替换为1.1

"doctrine/doctrine-orm-module": "^1.1"

我建议您定义在作曲家中使用的依赖项版本。目的是使您的项目在发布新版本的依赖项时不会中断。

PHP Zend Controller插件被调用两次 - php

我注意到我的插件被调用了两次。我知道这个事实是因为在我的ViewSetup插件中它注册了标题,并且标题两次包含相同的内容。有任何想法吗? 参考方案 您最有可能将呼叫复制到preDispatch或postDispatch。对于尚未调度的每个请求,在Zend_Controller_Front::dispatch的循环内调用这些方法。这意味着将分派设置为false…

在ZEND中处理JSONP调用 - php

通过搜索(或Google)找不到答案,所以我自己问。是否可以处理对zend框架的JSONP调用?仅找到此页面:http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme但我不确定它是否已经实施!谢谢 参考方案 JSONP只是包装在客户端上执行的指定回调函数中的JSO…

共享vs专用php库 - php

我有一个由几个Zend Framework应用程序组成的服务器。我想知道在服务器上上传Zend Library并在所有应用程序之间共享而不是按应用程序上传是一个好主意。例如,多个应用程序同时请求或不请求一个库,是否会影响速度。它的优点和缺点是什么?提前谢谢。 参考方案 正如其他人指出的那样,有其优点和缺点。最大的缺点是,每次您要升级库代码时,都需要测试每个应…

如何在Zend Framework 2中配置依赖注入? - php

免责声明:我是Zend的完全菜鸟。我正在评估Zend Framework 2的工作状况,并尝试将其配置为与ZfTwig一起使用以进行模板制作。 (请参见此处:https://github.com/mtymek/ZfTwig)我通过了配置的Step 3,但是我不知道Step 4。我尝试将以下内容放在application.config中,但效果不好。我该放在哪…

视图助手中的Zend重定向 - php

嗨,我有以下脚本可在视图帮助器中重定向<?php class Application_View_Helper_ExistUserRev extends Zend_View_Helper_Abstract{ public function existUserRev($params,$user) { $businessReviewMapper = new …