我想用zf-console执行ZF3动作 .
我可以使用zend-mvc-console模块做到这一点,它工作正常 .
例如 .
应用程序/配置/ module.config.php:
'console' => [
'router' => [
'routes' => [
'cronroute' => [
'options' => [
'route' => 'sync',
'defaults' => [
'controller' => Controller\ConsoleController::class,
'action' => 'syncEvents'
]
]
]
]
]
],
应用/ SRC /控制器/ ConsoleController.php
class ConsoleController extends AbstractActionController
{
/**
* Entity manager.
* @var Doctrine\ORM\EntityManager
*/
private $entityManager;
/**
* User Manager
* @var Application\Service\UserManager
*/
private $userManager;
/**
* Constructor.
*/
public function __construct($entityManager, $userManager)
{
$this->entityManager = $entityManager;
$this->userManager = $userManager;
}
public function syncAction()
{
$response = $this->userManager->syncUserInfo();
return $response ? 'Sync Success' : 'Failed to sync';
}
}
但它说它将被弃用:
https://zendframework.github.io/zend-mvc-console/intro/#deprecated
它建议使用zfcampus的zf-console:
https://github.com/zfcampus/zf-console
但我找不到执行Controller操作或使用我的构建服务(如UserManager)的方法 .
有一个示例来构建Zend应用程序并检索服务管理器:
use Zend\Console\Console;
use Zend\Console\ColorInterface as Color;
use ZF\Console\Application;
use ZF\Console\Dispatcher;
chdir(dirname(__DIR__));
require __DIR__ . '/../vendor/autoload.php'; // Composer autoloader
$application = Zend\Mvc\Application::init(require 'config/application.config.php');
$services = $application->getServiceManager();
$buildModel = $services->get('My\BuildModel');
有没有办法用 execute Controller action 吗?或者我可以加载我的UserManager服务吗?
我试图获取我的UserManager:
$buildModel = $services->get('Application\Service\UserManager');
但收到错误:
PHP Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Unable to resolve service "Application\Service\UserManager" to a factory; are you certain you provided it during configuration?' in /var/www/html/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:687
2 回答
zend-mvc-console模块似乎确实处于弃用的边缘 . 就像你一样,我试图实现zfcampus / zf-console . 由于mvc-console模块似乎(几乎)已被弃用,我建议你使用与(mvc)控制器不同的东西来进行控制台工作 . 我使用了一个可以处理调用的类(以zf-console期望的方式) .
这是我为我的项目工作的一个虚拟例子;
这是在命令行上调用的脚本:
处理程序函数可以使用服务管理器将任何依赖项注入命令处理程序:
命令类放在Command文件夹中,它看起来像:
(
这是我的解决方案:
[serviceEmail这是一个本地类变量,由该命令处理程序的工厂加载 . ]