如何从Zend Framework 2中的控制器执行控制台命令



我已经在Zend Framework 2中开发了一个CLI命令。我想从控制器中运行它。我该如何在Zend Framework 2?

中执行此操作

您应该将请求转发到您想到的特定CLI ConsoleController。您可以使用Forward插件来实现此目标。例如:

class HttpController extends AbstractActionController
{
    public function indexAction()
    {
        // do some stuff
        $response = $this->forward()->dispatch(ConsoleController::class, ['action' => 'process']);
        // do stuff with your response | array
        $bar = $response['foo'];
    }
}
class ConsoleController extends AbstractActionController
{
    public function processAction()
    {
        // do stuff
        return ['foo' => 'bar'];
    }
}

请注意,我在第一个参数中调用ConsoleController::class。您应该匹配控制器在配置中的注册方式。

return [
    'controllers' => [
        'factories' => [
            HttpController::class => InvokableFactory::class,
            ConsoleController::class => InvokableFactory::class,
        ],
        'aliases' => [
            'ConsoleController' => ConsoleController::class,
        ],
    ],
];

请注意,呼叫$this->forward()->dispatch('ConsoleController', ['action' => 'process'])也是一个有效的选项,因为调度会寻找注册的控制器。

您可以这样做:

$cmd = "php filenameToRun.php";
shell_exec($cmd);

或喜欢:

$cmd = "pwd";
shell_exec($cmd);

或喜欢:

$cmd = "mkdir myNewFolder";
shell_exec($cmd);

您放入括号中的任何常规命令都可以工作。

最新更新