Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-从控制台命令调用控制器方法_Php_Symfony_Cron - Fatal编程技术网

Php Symfony 2-从控制台命令调用控制器方法

Php Symfony 2-从控制台命令调用控制器方法,php,symfony,cron,Php,Symfony,Cron,我试图创建一个symfony控制台命令来执行一个端点 BillingBundle/Command/RejectCommand.php 当我使用POSTman调用端点/拒绝线时,这种方法可以很好地工作。然而,我不太确定如何从控制台命令调用,以便在调用时 php应用程序/控制台cron:rejectLines 它起作用了 这就是我想要实现的 $cron = new SalesOrderService(); $cron->rejectSalesOrderLines(); 但是,因为SalesO

我试图创建一个symfony控制台命令来执行一个端点

BillingBundle/Command/RejectCommand.php

当我使用POSTman调用端点/拒绝线时,这种方法可以很好地工作。然而,我不太确定如何从控制台命令调用,以便在调用时

php应用程序/控制台cron:rejectLines

它起作用了

这就是我想要实现的

$cron = new SalesOrderService();
$cron->rejectSalesOrderLines();

但是,因为SalesOrderService类有一些参数传递给_构造,所以我不太确定在通过命令行调用时如何传递它。有什么想法吗?

您不需要从命令行传递参数。您需要您的服务通过DI容器注入其参数

我在您的控制器上看到了
InjectParams
注释,因此我认为您正在使用
jmsdiextranble
。在这种情况下,您可以在服务/控制器上注入参数(就像您所做的那样),并使用

<?php

use JMS\DiExtraBundle\Annotation\Service;

/**
 * @Service("some.service.id")
 */
class SalesOrderService
{
    ....
}
$yourService = $this->getContainer()->get('some.service.id');

您的
SalesOrderService
是一项服务,其生命周期由依赖项注入系统的symfony2容器管理。 因此,您可能会在类定义中找到服务声明的名称(您正在使用),因此:

  • 在类名注释中检查服务定义的名称。例如:

    /**
    *  @Service("salesorder.service.id")
    */
    class SalesOrderService
    
  • 在控制台命令中请求容器:

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("Starting the cron");
    
       // Call the method here
       $service = $this->getContainer()->get('salesorder.service.id');
       $service-> rejectSalesOrderLines()
        $output->writeln("Cron completed");
    }
    

  • 希望获得此帮助

    您是否尝试在CLI中运行它?输出是什么?
    /**
    *  @Service("salesorder.service.id")
    */
    class SalesOrderService
    
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln("Starting the cron");
    
       // Call the method here
       $service = $this->getContainer()->get('salesorder.service.id');
       $service-> rejectSalesOrderLines()
        $output->writeln("Cron completed");
    }