从控制器的Symfony3控制台运行控制台命令

我想从我的控制器使用过程组件运行命令" title="控制台命令">控制台命令,但它不起作用。从控制器的Symfony3控制台运行控制台命令

这是我的代码:

 $process = new Process('php bin/console mycommand:run'); 

$process->setInput($myArg);

$process->start();

我也试过:

php bin/console mycommand:run my_argument 

你能告诉我什么,我做错了:

$process = new Process('php bin/console mycommand:run ' . $myArg) 

$process->start();

我使用运行我的命令?

回答:

我认为问题是路径。无论如何,你应该考虑不使用Process来调用Symfony命令。控制台组件允许调用命令,例如在控制器中。从文档

例子:

// src/Controller/SpoolController.php 

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Console\Application;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\Console\Input\ArrayInput;

use Symfony\Component\Console\Output\BufferedOutput;

use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\HttpKernel\KernelInterface;

class SpoolController extends Controller

{

public function sendSpoolAction($messages = 10, KernelInterface $kernel)

{

$application = new Application($kernel);

$application->setAutoExit(false);

$input = new ArrayInput(array(

'command' => 'swiftmailer:spool:send',

// (optional) define the value of command arguments

'fooArgument' => 'barValue',

// (optional) pass options to the command

'--message-limit' => $messages,

));

// You can use NullOutput() if you don't need the output

$output = new BufferedOutput();

$application->run($input, $output);

// return the output, don't use if you used NullOutput()

$content = $output->fetch();

// return new Response(""), if you used NullOutput()

return new Response($content);

}

}

使用这种方式你确定代码将总是工作。当PHP处于安全模式时(exec等被关闭)Process组件是无用的。此外,您不需要关心路径和其他事情,否则您所称的“手动”命令就是命令。

你可以阅读更多关于从控制器here调用命令。

以上是 从控制器的Symfony3控制台运行控制台命令 的全部内容, 来源链接: utcz.com/qa/265119.html

回到顶部