我正在使用Symfony 3和Twig模板开发应用程序。我使用symfony formBuilder创建了表单。每次在数据库中插入一行时,我都需要运行一个php脚本。无论如何我能做到这一点吗?
答案 0 :(得分:2)
是的,当然,您可以使用事件和事件监听器https://symfony.com/doc/current/event_dispatcher.html或Doctrine事件监听器和订户https://symfony.com/doc/current/doctrine/event_listeners_subscribers.html
答案 1 :(得分:1)
首先,要运行脚本,您可以使用Process component of Symfony。
以下是一个使用示例:
$phpBinaryFinder = new PhpExecutableFinder();
$phpBinaryPath = $phpBinaryFinder->find();
$process = new Process("{$phpBinaryPath} worker.php");
$process->run();
您应该阅读相关的doc以获取更多见解。
然后你想在刷新教义之后挂钩,然后使用事件监听器。它是一个具有您注册为服务的特定方法的类。
您需要定义一个类:
namespace App\EventListener;
use Doctrine\ORM\Event\PostFlushEventArgs;
use Doctrine\ORM\Event\LifecycleEventArgs;
class YourListener
{
private $persisted = [];
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if (!$entity instanceof YourRecord) {
return;
}
$this->persisted[] = $entity;
}
public function postFlush(PostFlushEventArgs $args)
{
foreach ($persisted as $row) {
// Execute your action for the given row
}
}
}
然后您需要将其注册为服务:
# services.yaml
services:
App\EventListener\YourListener:
tags:
- { name: doctrine.event_listener, event: postPersist }
- { name: doctrine.event_listener, event: postFlush }
查看相关文档:https://symfony.com/doc/current/doctrine/event_listeners_subscribers.html