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脚本自动执行
<?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');
}
}