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

时间:2017-12-02 06:07:52

标签: zend-framework2

我在Zend Framework 2中开发了一个CLI命令。我想从控制器运行它。我怎样才能在Zend Framework 2中做到这一点?

2 个答案:

答案 0 :(得分:0)

您应该将您的请求转发到您想到的特定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'])也是一个有效选项,因为Dispatch会查找已注册的控制器。

答案 1 :(得分:-1)

你可以这样做:

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

或者像这样:

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

或者像这样:

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

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