Как исправить установку / обновление для более новой Zendframework? - PullRequest
0 голосов
/ 29 июня 2018

От установки композитора, я получил более новую версию, чем старый Zend / Libeary, но получил эту ошибку: ошибка atal: 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 / Serviceanager .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

Экран установки ...

Вот папки, в которых он установлен под общим

   Vendor
      Zendframework
          Zend-Mvc
              src
    ...

Как добавить роутер в конфигурацию? Вот что я установил:

Ответы [ 2 ]

0 голосов
/ 28 июля 2018

Zend Skeleton Application содержит этот 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. Как вы также можете прочитать, этот пакет имеет свои собственные требования и пространство имен для загрузки.

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 файлы (config PSR-0 или PSR-4 в ключе autoload), будут загружены.

Итак, включая vendor/autoload.php действительно достаточно. Пролистайте их и увидите.

Затем вы используете пространства имен для использования других классов. Вы спрашивали об этом, но, видя объем этого вопроса, вы должны сделать это отдельным вопросом. Читайте также о пространствах имен со ссылкой, которую я отправляю вам в комментариях.


Обсуждение выходит из-под контроля, поэтому пошагово сделайте следующее:

  1. Убедитесь, что у вас есть настройки хоста (Вкл .: Ubuntu (Apache) , Windows 10 (Apache) , Mac (Apache) , Ubuntu (nginx) , Windows 10 (nginx) , Mac (nginx) ) (пока это будет пустая папка, назовите ее «skeleton», hostname »скелет .loc ")
  2. Загрузите Zend Skeleton Application (прямая .zip ссылка)
  3. Распаковать в новую папку с шага 1 («скелет»)
  4. Открыть папку хоста "skeleton" в терминальной сессии
  5. Запустите composer install (из сеанса терминала "skeleton") (вы хотите "вставить в module.config.php во время установки для всех параметров (на этот раз не требователен), это option 1 (каждый раз))
  6. Дождаться запуска установки
  7. Посетите "skeleton.loc" (возможно, канонический: http://skeleton.loc/) в вашем браузере, вы должны увидеть изображение ниже (но для ZF3;), скопировал его из интернета)

zf2 start image as demo

0 голосов
/ 29 июня 2018

Я не могу четко понять ваш запрос, но если вы изо всех сил пытаетесь добавить маршруты, вы можете добавить свой маршрут в 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',
                    ],
                ],
            ],
        ],
    ],

  //...
];
...