Как создать консольное приложение ZF3

В Zend Framework 2 очень просто добавить начальный баннер модуля в консольные приложения.

Все, что нам нужно, это реализовать getConsoleBanner а также getConsoleUsage методы и реализовать Zend\ModuleManager\Feature\ConsoleUsageProviderInterface или же ConsoleBannerProviderInterface интерфейсы.

Этого достаточно, чтобы вывести эти сообщения в консоль, когда public/index.php запускается через CLI.

В Zend Framework 3 это не то же самое.

Выполнение одинаковых настроек не дает того же результата. На самом деле в консоли мы видим html-страницу по умолчанию для скелетного приложения так же, как мы видим ее через браузер.

Эта страница просматривается перед установкой пользовательского модуля:
Вот документы для zend-mvc-console модуль
https://zendframework.github.io/zend-mvc-console/intro/

Даже после того, как модуль установлен как предложено ('Zend\Mvc\Console' добавлены в определения модуля) баннеры консоли не показываются. Я проверил демпинг var внутри методов, и я могу просматривать данные, поэтому инфраструктура выполняет эти методы, но не показывает результат в консоли.

Я тестировал с консольными маршрутами и контроллерами. Маршрут найден, действие контроллера выполнено, но ничего не отображается снова.

Я копался в коде фреймворка и кажется Zend\Mvc\Console\ResponseSender\ConsoleResponseSender класс никогда не выполняется.

Должен ли я зарегистрировать некоторые view_manager стратегии, чтобы что-то отображалось в CLI?

Вот источники поверх скелетного приложения zf3:
https://gist.github.com/kachar/06f0c9096bcc1cc0b00f4612aed1b68b

Запуск приложения:

$ php -v
PHP 7.0.6 (cli) (built: Apr 27 2016 14:00:40) ( ZTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

$ php public/index.php
Application\Module::getConsoleBanner
Application\Module::getConsoleUsage

$ php public/index.php user
Application\Controller\IndexController::indexAction

18

Решение

По нашей собственной документации, MVC <-> Консольная интеграция устарела. Мы рекомендуем использовать ZF-консоль или же консоль Symfony для создания функциональности консоли для вашего приложения.

Мы являются мы знаем о проблемах с Zend-mvc-console, и мы скоро выпустим патч для их устранения, который исправит ваши краткосрочные проблемы. Тем не менее, мы рекомендуем перейти на другое решение в долгосрочной перспективе.

9

Другие решения

Вы можете использовать модуль zend-mvc-console. Тот же API, что и у консоли zf2 🙂
Пожалуйста, обратите внимание, что этот модуль скоро будет устаревшим.

Источники:

2