如何修复更新Zendframework的安装/升级?

时间:2018-06-29 05:23:04

标签: php zend-framework2 zend-framework3

从composer Install中,我获得了比旧的Zend / Libeary更新的版本,但是出现了以下错误: 原始错误:未捕获的Zend \ ServiceManager \ Exception \ ServiceNotFoundException:无法将服务“路由器”解析为工厂;您确定在配置期间提供了它吗?在/home/azureuser/nginad/upload/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:687中的堆栈跟踪:#0 / home / azureuser / nginad / upload / vendor / zendframework / zend-servicemanager / src / ServiceManager .php(763):Zend \ ServiceManager \ ServiceManager-> getFactory('Router')#1 /home/azureuser/nginad/upload/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(200):Zend \ ServiceManager \ ServiceManager-> doCreate('Router')#2 /home/azureuser/nginad/upload/vendor/zendframework/zend-mvc/src/Application.php(158):Zend \ ServiceManager \ ServiceManager-> get('Router' )#3 /home/azureuser/nginad/upload/vendor/zendframework/zend-mvc/src/Application.php(273):Zend \ Mvc \ Application-> bootstrap(Array)#4 / home / azureuser / nginad / upload /public/index.php(28):Zend \ Mvc \ Application :: init(Array)#5 {main}放在/home/azureuser/nginad/upload/vendor/zendframework/zend-servicemanager/src/ServiceManager.php中在第687行

Install Screen ...

这是在公共目录下安装的文件夹

   Vendor
      Zendframework
          Zend-Mvc
              src
    ...

如何将路由器添加到配置中? 这是我安装的:

2 个答案:

答案 0 :(得分:0)

我无法清楚地理解您的查询,但是如果您在添加路线时遇到困难,可以像下面这样在module.config.php中添加路线

<?php
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [
    'router' => [
        'routes' => [
            'home' => [
                'type' => Literal::class,
                'options' => [
                    'route'    => '/',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
            ],
            'application' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/application[/:action]',
                    'defaults' => [
                        'controller'    => Controller\IndexController::class,
                        'action'        => 'index',
                    ],
                ],
            ],
        ],
    ],

  //...
];

答案 1 :(得分:0)

Zend Skeleton Application在其根项目文件夹中包含this composer.json。您在此处看到它需要某些模块,其中包括一个用于安装的模块。您还会看到autoload。现在,每个要加载/需要的模块都可以执行相同的操作,从而创建了其他composer.json文件和要求的结构。在链接文件中,您看到zendframework/zend-mvc是必需的("zendframework/zend-mvc": "^3.0.1",

然后看看zendframework/zend-form的composer.json文件。您将看到其他require键和版本,以及附加的autoload键。将所有这些(甚至更多)混在一起以创建单个可安装软件包。该软件包是您的完整安装,并且是安装后的项目中vendor/映射中的所有内容(项目根composer.json根文件之后)。

下面,我对当前项目的composer.json进行了稍微修改(删除了一些与问题无关的内容并突出显示了其他内容)的屏幕截图。

在左侧,您将看到文件夹结构。在底部,您看到文件composer.jsoncomposer.lock

.json(中间屏幕)包含项目的根要求。由于每个软件包都有自己的要求,因此composer.lock是在安装过程中生成的(右侧文件)。该文件包含每个已安装的版本。 (使用composer install命令创建)。

正如您在.lock文件中看到的那样,某处需要软件包51systems/doctrine-encrypt。您也可以在此处阅读,该程序包具有其自身的要求和要加载的名称空间。

showing json and lock files

现在,Composer安装过程还将创建您的自动加载。

Zend Framework在应用程序本身中开始自动加载,但是它使用vendor/autoload.php文件中包含的文件。以下是public/index.php中与自动加载有关的内容。要了解全部内容,请安装框架或查看Github。

// Composer autoloading
include __DIR__ . '/../vendor/autoload.php';

// ... other stuff

// Run the application!
Application::init($appConfig)->run();

好的,这表明我们包括vendor/autoload.php。让我们看看:

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit7befb6b36ba61da7e01a592b255158ab::getLoader();

嗯...是的,这就是整个文件。不是很多。但是,我们也可以遵循这一点。

vendor文件夹中,您将找到一个名为composer的文件夹。在这里,您将以autoload_开头的几个文件,这些文件确保每个文件都通过这些composer.json文件注册(在键PSR-0中配置PSR-4autoload)加载。

因此,仅包含vendor/autoload.php就足够了。单击它们以查看。

接下来,您将使用名称空间来使用其他类。您曾问过这个问题,但鉴于此问题的范围,您应该将其作为一个单独的问题。另外,请在评论中提供我发送给您的链接,以了解名称空间。


下面的讨论将变得一发不可收拾,因此请分步骤进行以下操作:

  1. 确保已进行主机设置(打开:Ubuntu (Apache)Windows 10 (Apache)Mac (Apache)Ubuntu (nginx)Windows 10 (nginx)Mac (nginx))(现在将其设置为空文件夹,将其称为“ skeleton”,主机名“ skeleton.loc”)
  2. 下载Zend Skeleton Application (direct .zip link)
  3. 从第1步中解压缩新文件夹(“骨骼”)
  4. 在终端会话中打开主机文件夹“ skeleton”
  5. 运行composer install(来自“骨骼”终端会话)(要在安装过程中为所有选项“注入” module.config.php(这次不要挑剔),即option 1(每个时间))
  6. 等待安装运行
  7. 在浏览器中访问“ skeleton.loc”(也许是规范的:http://skeleton.loc/),您应该在下面看到图像(但对于ZF3;从互联网上将其删除)

zf2 start image as demo