Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 如何从bin/console命令调用特定方法_Php_Symfony - Fatal编程技术网

Php 如何从bin/console命令调用特定方法

Php 如何从bin/console命令调用特定方法,php,symfony,Php,Symfony,我需要每2小时运行一次控制器方法。我在某处读到,您需要创建一个命令,并使用CRON运行该命令。这是正确的吗 MY COMMAND: namespace AppBundle\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; u

我需要每2小时运行一次控制器方法。我在某处读到,您需要创建一个命令,并使用CRON运行该命令。这是正确的吗

MY COMMAND:
namespace AppBundle\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Routing\Annotation\Route;

class RunCommand extends Command
{
    // the name of the command (the part after "bin/console")
    protected static $defaultName = 'app:run';

    protected function configure()
    {
        // ...
    }


    protected function execute(InputInterface $input, OutputInterface $output)
    {
        echo 'BEGIN';

        $controller = new \AppBundle\Controller\DefaultController();
        $controller->storeAction();

        echo 'END';
    }
}


MY CONTROLLER:
/**
 * @Route("/to-db", name="to-db")
 */
public function storeAction()
{
    $entityManager = $this->getDoctrine()->getManager();

    $data = new Skuska();
    $data->setName('Keyboard');
    $entityManager->persist($data);
    $entityManager->flush();

    // die();
}
我的错误:在ControllerTrait.php第424行:调用成员函数的has()为null

我的代码正确吗?如何使用cron运行方法


我不想用另一个包裹。我想自己对其进行编程

如注释中所述,您应该将逻辑移出控制器并移入服务,并在命令和控制器中使用该服务

使用默认的服务自动加载配置,您甚至不必关心您的服务声明。您的命令将自动成为服务,您可以向其中注入其他服务。

对于控制器,您甚至不需要使用特定的构造函数。


这可能不是实例化控制器的方式。老实说,控制器可能太高了,无法在控制台命令中使用。我该如何编程?如何调用方法?控制器用于请求。如果控制器中的功能在其他情况下也可用,那么将其放在服务中是明智的。此外,您还应该了解如何在命令中执行依赖项注入(在symfony 4.0中,您只需将服务添加到命令的构造函数中,并将其存储在属性中以供以后使用)。此外,控制器操作(带有路由)应始终返回响应。您应将控制器逻辑移动到服务中,并在命令中调用它,如前一条注释所述。我有一条错误消息:在DefinitionErrorExceptionPass.php第37行:无法自动连线服务“AppBundle\service\StoreService”:方法的参数“$entityManager”“\uuu construct()”的类型为“AppBundle\Service\EntityManager”“但是找不到此类。如果您复制了我的示例而没有更改任何内容,则您的类顶部将缺少
用法。您需要添加
使用条令\ORM\EntityManager。我在示例中添加了用法和文件路径。请确保检查它们是否与您的目录结构和框架版本匹配。我收到一条错误消息:“app”命名空间中未定义任何命令。你是说这个吗?原则:映射我的symfony是3.4我刚刚意识到代码片段中的名称空间是
AppBundle\Command
。您需要使用它,而不是
app\Command
。我将改变我的例子来反映这一点。您使用的是什么版本的Symfony?