#php #symfony #zend-framework #composer-php
#php #symfony #zend-framework #композитор-php
Вопрос:
Когда я устанавливаю Zend через composer create-project -n -sdev zendframework/skeleton-application
, как указано в основном руководстве Zend, я получаю скелетное приложение, которое, кажется, работает хорошо.
Однако, когда я следую совету этого руководства по использованию composer development-enable
, я получаю следующее сообщение:
[SymfonyComponentConsoleExceptionCommandNotFoundException]
Command "development-enable" is not defined.
Кто-нибудь может дублировать / исправить эту проблему?
Обычно я бы предположил, что это проблема со значением bash $ PATH, но composer
команда сама по себе выполняется просто отлично, поэтому я думаю, что это может быть какая-то другая проблема, специфичная для этой подкоманды — например, где-то отсутствует зависимость.
Вот соответствующая часть руководства, которому я пытаюсь следовать:
https://docs.zendframework.com/tutorials/getting-started/skeleton-application/
(На случай, если это поможет в целях дублирования: версия CLI PHP на моем сервере разработки — 5.4.43. По причинам, которыми я не буду вас утомлять, я не могу обновить этот CLI PHP до более новой версии; основной выпуск, который Apache использует на моем компьютере, — 5.6.)
ПРАВКА 1: Повторный запуск моей установки с использованием composer create-project -s dev zendframework/skeleton-application
(как указано в связанном руководстве) по-прежнему приводит к той же проблеме.
ПРАВКА 2: Вот мой ввод / вывод оболочки.
patrick [~/www/berlin-data]# composer create-project -n -sdev zendframework/skeleton-application
Installing zendframework/skeleton-application (2.3.3)
- Installing zendframework/skeleton-application (2.3.3)
Loading from cache
Created project in /home1/patrick/public_html/berlin-data/skeleton-application
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing zendframework/zendxml (1.0.2)
Loading from cache
- Installing zendframework/zendframework (2.3.3)
Loading from cache
zendframework/zendframework suggests installing doctrine/annotations (Doctrine Annotations >=1.0 for annotation features)
zendframework/zendframework suggests installing ircmaxell/random-lib (Fallback random byte generator for ZendMathRand if OpenSSL/Mcrypt extensions are unavailable)
zendframework/zendframework suggests installing ocramius/proxy-manager (ProxyManager 0.5.* to handle lazy initialization of services)
zendframework/zendframework suggests installing zendframework/zendpdf (ZendPdf for creating PDF representations of barcodes)
zendframework/zendframework suggests installing zendframework/zendservice-recaptcha (ZendServiceReCaptcha for rendering ReCaptchas in ZendCaptcha and/or ZendForm)
Writing lock file
Generating autoload files
patrick [~/www/berlin-data]# cd skeleton-application/
patrick [~/www/berlin-data/skeleton-application]# composer development-enable
[SymfonyComponentConsoleExceptionCommandNotFoundException]
Command "development-enable" is not defined.
Комментарии:
1. Попробуйте
composer "development-enable"
заключить разработку в кавычки-включить2. Хорошее предложение, но это тоже приводит к той же ошибке.
3. Какой CLI вы используете? Windows Powershell? базовый cmd.exe ? Или вы используете какую-то другую систему?
4. Хороший вопрос, Шоссер. Я использую оболочку bash. (Теперь я отредактировал вопрос, чтобы включить эту информацию.)
5. в вашем composer.json в
scripts
разделеdevelopment-enabled
определено? Если да, то запускаете ли вы команду composer из корневого каталога проекта, в котором находится composer.json?
Ответ №1:
При запуске команды
composer create-project -n -sdev zendframework/skeleton-application
Это создаст каталог в вашем текущем каталоге с именем skeleton-application
внутри этого каталога вам нужно запустить команду:
composer development-enable
Если это все еще не работает, значит, что-то пошло не так в процессе установки.
Первая команда должна выдавать put что-то вроде:
$ composer create-project -n -sdev zendframework/skeleton-application
Installing zendframework/skeleton-application (dev-master 941da45b407e4f09e264f0 00fb537928badb96ed)
- Installing zendframework/skeleton-application (dev-master master)
Cloning master from cache
Created project in C:Users<UserName>Documentsskeleton-application
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
- Installing zendframework/zend-component-installer (0.3.0)
Downloading: 100%
- Installing zendframework/zend-stdlib (3.0.1)
Downloading: 100%
...
Обратите внимание на эту строку Created project in C:Users<UserName>Documentsskeleton-application
Это каталог, в котором вы должны находиться, чтобы запустить команду:
cd C:Users<UserName>Documentsskeleton-application
composer development-enable
Если это все еще не сработало, попробуйте указать версию для загрузки:
composer create-project -n "zendframework/skeleton-application":"dev-master"
PS
На момент написания этой статьи для скелетного приложения требуется PHP "^5.6 || ^7.0"
. Поэтому, если вы используете более низкую версию, composer не будет устанавливать эту копию. И учебные пособия, основанные на нем, могут работать не так, как ожидалось.
Комментарии:
1. Спасибо. Я добавил некоторую дополнительную информацию к вопросу, показывая особенности того, как это не удается.
2. Похоже, вы получаете старую версию скелетного приложения, которая не была настроена с помощью команды composer, которую вы пытаетесь запустить. Попробуйте очистить кэш вашего composer и снова установить скелетное приложение.
composer clear-cache
3. Не повезло. Запуск моей строки установки после, за
composer self-update
которойcomposer clear-cache
следует, по-прежнему приводит к загрузке версии 2.33. Я даже пытался удалить аргументы-n
и-sdev
, но безуспешно — моя строка установки по-прежнему заканчивается установкой версии 2.33 Zend. Composer находится на версии 1.2.1 (стабильный канал).4. @Patrick Я кое-что добавил к своему ответу, чтобы попробовать,
composer create-project -n "zendframework/skeleton-application":"dev-master"
возможно, явно укажите, какую версию вы хотите, в этом случае я просто использую последнюю версию master.5. Похоже, Composer отказывается устанавливать скелет Zend из dev-master на мою версию PHP-CLI (которая 5.4.x), даже если я явно запрашиваю версию фреймворка «dev-master». (Composer явно выдает ошибку, в которой говорится, что он не смог найти пакет «в версии, устанавливаемой с использованием вашей версии PHP».) Это ограничение с моей стороны, конечно, не отражается на качестве вашего ответа, который я отмечу как правильный. Спасибо за все время, которое вы потратили на это. Я считаю, что этот ответ сэкономит кому-то много времени в будущем.
Ответ №2:
Я заметил две вещи: при первой инициализации скелетного приложения, в зависимости от ваших настроек, режим разработки включен по умолчанию.
Если вы хотите запустить
composer development-enable
или любые другие подобные команды должны находиться в вашем path/to/install
или path/to/yourapp
каталоге, чтобы это сработало! Это папка, в которой содержится ваша локальная установка composer. Если вы находитесь в любом из родительских каталогов, команда не будет работать.
Ответ №3:
У меня также возникла похожая проблема при попытке включить режим разработки с помощью команды composer development-enable
в моем приложении apigility. Я получал сообщение об ошибке:
zf-development-mode не распознается как внутренняя или внешняя команда.
На веб-сайте apigility есть страница, касающаяся модуля режима разработки: https://apigility.org/documentation/modules/zf-development-mode
Я нашел, следуя инструкции по установке модуля из composer:
$ composer require zfcampus/zf-development-mode
Затем делаем копию конфигурационного файла разработки:
$ cp vendor/zfcampus/zf-development-mode/development.config.php.dist config/
Теперь использование composer development-enable
, похоже, работает нормально, что в моем случае вернуло сообщение «Уже в режиме разработки».