Php Symfony 3项目中的cron/Jobs

Php Symfony 3项目中的cron/Jobs,php,symfony,cron,Php,Symfony,Cron,我的项目的一个特点是以两种方式在两个数据库之间同步数据 从接口。(用户单击按钮开始同步) 从cron脚本自动执行 我在指定的控制器中添加了一个新操作“synchronizeAction”,我管理了路由和视图,它工作正常。 问题在于cron: 我应该将cron脚本放在哪个位置 如何使用我在该cron内的控制器中创建的“synchronizeAction”方法 我创建了一个服务并使用它 <?xml version="1.0" ?> <container xmlns="..."&

我的项目的一个特点是以两种方式在两个数据库之间同步数据

  • 从接口。(用户单击按钮开始同步)
  • 从cron脚本自动执行
我在指定的控制器中添加了一个新操作“synchronizeAction”,我管理了路由和视图,它工作正常。 问题在于cron:

  • 我应该将cron脚本放在哪个位置
  • 如何使用我在该cron内的控制器中创建的“synchronizeAction”方法
  • 我创建了一个服务并使用它

    <?xml version="1.0" ?>
    <container xmlns="...">
        <services>
            <service id="soc_ref.synchro_clients" class="SocRefBundle\Services    \SynchroClient">    
            </service>
        </services>
    </container>
    
    如何使用/注入entityManager$这->getDoctrine()->getManager();只能在控制器中访问


    我刚刚开始symfony开发,感谢您的帮助:)

    如果必须这样做,首先我会将业务逻辑转移到服务。创建命令并从控制器和命令调用服务函数。然后配置cron以调用创建的命令

    如果必须这样做,首先我会将业务逻辑移动到服务。创建命令并从控制器和命令调用服务函数。然后配置cron以调用创建的命令

    谢谢你的回答,先生,我试着这么做,但我遇到了问题。你能看到我的回复并告诉我怎么做吗?你需要创建一个ContainerWareCommand。这里有更多信息:创建后,您可以使用$this->getContainer()->get('service_name')从DI容器访问您的服务。谢谢您的回答,先生,我尝试过这样做,但遇到了问题。你能看到我的回复并告诉我怎么做吗?你需要创建一个ContainerWareCommand。这里有更多信息:创建后,您可以使用$this->getContainer()->get('service\u name')从DI容器访问您的服务
    class SynchroClient 
    {
    
        public function __construct()
        {
    
        }
    
        public function synchronize () {
            $ref_db = $this->getDoctrine()->getManager();
            $other_db = $this->getDoctrine()->getManager('other');
    
            $sql = ' SELECT active, .... ';
            $statement = $other_db->getConnection()->prepare($sql);
            $statement->execute();
            $result = $statement->fetchAll();
    
            foreach ($result as $entity) {
                $client = new Client();
                $client->setActive($entity['active']);
    
                $ref_db->persist($client);
            }
            $sql_truncate = ' TRUNCATE TABLE client';
            $statement = $ref_db->getConnection()->prepare($sql_truncate);
            $statement->execute();
            $ref_db->flush();
    
            return new Response('1');
        }
    
    }