中执行此操作
我已经在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);
您放入括号中的任何常规命令都可以工作。