从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
...
如何将路由器添加到配置中? 这是我安装的:
答案 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.json
和composer.lock
。
.json(中间屏幕)包含项目的根要求。由于每个软件包都有自己的要求,因此composer.lock
是在安装过程中生成的(右侧文件)。该文件包含每个已安装的版本。 (使用composer install
命令创建)。
正如您在.lock
文件中看到的那样,某处需要软件包51systems/doctrine-encrypt
。您也可以在此处阅读,该程序包具有其自身的要求和要加载的名称空间。
现在,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-4
或autoload
)加载。
因此,仅包含vendor/autoload.php
就足够了。单击它们以查看。
接下来,您将使用名称空间来使用其他类。您曾问过这个问题,但鉴于此问题的范围,您应该将其作为一个单独的问题。另外,请在评论中提供我发送给您的链接,以了解名称空间。
下面的讨论将变得一发不可收拾,因此请分步骤进行以下操作:
composer install
(来自“骨骼”终端会话)(要在安装过程中为所有选项“注入” module.config.php
(这次不要挑剔),即option 1
(每个时间))