在 Zend Framework 2 中,将初始模块横幅添加到控制台应用程序非常简单。
我们只需要实现 getConsoleBanner
和 getConsoleUsage
方法并实现 Zend\ModuleManager\Feature\ConsoleUsageProviderInterface
或 ConsoleBannerProviderInterface
接口(interface)。
这足以在通过 CLI 启动 public/index.php
时将这些消息转储到控制台中。
在 Zend Framework 3 中不一样。
进行相同的设置不会提供相同的结果。实际上,在控制台中,我们看到骨架应用程序的默认 html 页面的方式与我们通过浏览器访问它的方式相同。
在我们安装自定义模块之前会看到该页面:
这是 zend-mvc-console
模块的文档
https://zendframework.github.io/zend-mvc-console/intro/
即使按照建议安装了模块(在模块定义中添加了 'Zend\Mvc\Console'
),控制台横幅也不会显示。我已经在方法内部使用 var 转储进行了测试,我能够查看数据,因此框架执行了这些方法,但在控制台中没有显示任何结果。
我已经使用控制台路由和 Controller 进行了测试。找到路由,执行 Controller 操作,但 cli 中不再显示任何内容。
我深入研究了框架的代码,似乎 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
最佳答案
根据我们自己的文档,MVC <-> Console integration is deprecated .我们建议使用 zf-console或 symfony console为您的应用程序构建控制台功能。
我们知道 zend-mvc-console 的问题,我们将很快发布补丁版本来解决这些问题,这将解决您的短期问题。但是,我们建议从长远来看迁移到另一个解决方案。
关于php - 如何创建 ZF3 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38636186/