首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复较新的zendframework的安装/升级?

如何修复较新的zendframework的安装/升级?
EN

Stack Overflow用户
提问于 2018-06-29 13:23:04
回答 2查看 381关注 0票数 0

在composer Install中,我获得了比旧Zend/Libeary更新的版本,但得到了这样的错误:a error: Uncaught 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-servicemanager/src/ServiceManager.php:687/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\应用程序->bootstrap(数组) #4 /home/azureuser/nginad/upload/public/index.php(28):Zend\Mvc\应用程序::init(数组) #5 {main}在//home/azureuser/nginad/upload/public/index.php(28):/azureuser/nginad/upload/upload/vendor/zendframework/zend-mvc/src/Application.php(158):Zend\ServiceManager\ServiceManager->get(‘Router’)中抛出687行上的/zendframework/zend-servicemanager/src/ServiceManager.php

Install Screen...

下面是安装在public目录下的文件夹

代码语言:javascript
复制
   Vendor
      Zendframework
          Zend-Mvc
              src
    ...

如何将路由器添加到配置中?下面是我安装的内容:

EN

回答 2

Stack Overflow用户

发布于 2018-06-29 15:02:37

我不能清楚地理解您的查询,但是如果您正在努力添加路径,那么您可以像下面这样在module.config.php中添加您的路径

代码语言:javascript
复制
<?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',
                    ],
                ],
            ],
        ],
    ],

  //...
];
票数 0
EN

Stack Overflow用户

发布于 2018-07-28 08:14:34

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在某个地方是必需的。正如您还可以在那里看到的,该包有自己的要求和要加载的名称空间。

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

Zend Framework开始在应用程序本身中自动加载,但它使用vendor/autoload.php文件中包含的文件。下面是public/index.php中的一小段代码,与自动加载相关。要了解完整的内容,请安装框架或在Github上查看。

代码语言:javascript
复制
// Composer autoloading
include __DIR__ . '/../vendor/autoload.php';

// ... other stuff

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

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

代码语言:javascript
复制
<?php

// autoload.php @generated by Composer

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

return ComposerAutoloaderInit7befb6b36ba61da7e01a592b255158ab::getLoader();

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

vendor文件夹中,您将找到一个名为composer的文件夹。这里你将看到几个从autoload_开始的文件,这些文件确保通过这些composer.json文件注册的每个文件(配置PSR-0或key autoload中的PSR-4 )都会被加载。

所以,包括vendor/autoload.php就足够了。单击它们并查看。

接下来,您将使用名称空间来使用其他类。你问过这个问题,但考虑到这个问题的范围,你应该把它作为一个单独的问题。另外,请阅读带有我在评论中发送给您的链接的名称空间。

下面对的讨论已经失控,因此请逐步执行以下操作:

  1. 确保你有一个主机设置(在:Ubuntu (Apache)Windows 10 (Apache)Mac (Apache)Ubuntu (nginx)Windows 10 (nginx)Mac (nginx)上)(现在让它是一个空文件夹,称之为“骨架”,hostname "skeleton.loc")
  2. Download the Zend Skeleton Application (direct .zip link)
  3. Unpack in the new folder from step 1 ("skeleton")
  4. Open the host folder“maybe”in a Terminal session
  5. Run composer install (from“maybe”Terminal session) (你想在安装过程中为所有选项注入module.config.php (这次不挑剔),那是option 1 (每次))
  6. Wait“skeleton.loc”)
  7. Download installation to run
  8. 在你的浏览器中访问"skeleton.loc“(可能是规范的:C56),你应该会看到下面的图片(但对于ZF3;),从互联网上窃取)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51094786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档