Запустить php-скрипт после вставки

Я работаю над приложением, использующим шаблоны Symfony 3 и Twig. Я создал формы с помощью symfony formBuilder. Мне нужно запускать php-скрипт каждый раз, когда строка вставляется в базу данных. Как я могу это сделать?

Если вы используете доктрину, прочитайте об их слушателях событий или слушателях сущностей.

Eakethet 25.04.2018 10:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
140
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

да, конечно, вы можете использовать события и прослушиватели событий https://symfony.com/doc/current/event_dispatcher.html или Doctrine Event Listeners и подписчики https://symfony.com/doc/current/doctrine/event_listeners_subscribers.html

Ответ принят как подходящий

Во-первых, чтобы запустить сценарий, вы можете использовать Компонент процесса Symfony.

Вот пример использования:

$phpBinaryFinder = new PhpExecutableFinder();
$phpBinaryPath = $phpBinaryFinder->find();

$process = new Process("{$phpBinaryPath} worker.php");
$process->run();

Вы должны прочитать соответствующий док для получения дополнительной информации.


Затем вы хотите подключиться после сброса доктрины, а затем использовать прослушиватель событий. Это класс с определенным методом, который вы регистрируете как службу.

Вам нужно определить класс:

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

Другие вопросы по теме