维护清理

Note

此页面的内容需要进行重大更新。旧页面包含过时且可能不准确的信息。您仍然可以在 Mautic Developer Documentation archived repository 中访问它。

如果您有兴趣帮助开发此页面和其他新内容的,请考虑加入文档编写工作。

请阅读 Contributing GuidelinesContributing to Mautic’s documentation 以开始您的贡献。

要连接到 mautic:maintenance:cleanup 命令,请为 \Mautic\CoreBundle\CoreEvents::MAINTENANCE_CLEANUP_DATA 事件创建一个监听器。 使用 $event->setStat($key, $affectedRows, $sql, $sqlParameters) 向 CLI 命令提供反馈。 请注意,$sql$sqlParameters 仅用于调试,并且仅在 dev 环境中显示。

Warning

请勿在 dry run 事件期间删除记录。您可以使用 $event->isDryRun() 来验证是否为这种情况。有关更多详细信息,请参阅下面的代码示例。

<?php
// plugins\HelloWorldBundle\EventListener\MaintenanceSubscriber.php

declare(strict_types=1);

namespace MauticPlugin\HelloWorldBundle\EventListener;

use Doctrine\DBAL\Connection;
use Mautic\CoreBundle\CoreEvents;
use Mautic\CoreBundle\Event\MaintenanceEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\Translation\TranslatorInterface;

class MaintenanceSubscriber implements EventSubscriberInterface
{
    protected Connection $db;
    protected TranslatorInterface $translator;

    public function __construct(Connection $db, TranslatorInterface $translator)
    {
        $this->db         = $db;
        $this->translator = $translator;
    }

    public static function getSubscribedEvents()
    {
        return [
            CoreEvents::MAINTENANCE_CLEANUP_DATA => ['onDataCleanup', -50]
        ];
    }

    public function onDataCleanup(MaintenanceEvent $event)
    {
        $qb = $this->db->createQueryBuilder()
            ->setParameter('date', $event->getDate()->format('Y-m-d H:i:s'));

        if ($event->isDryRun()) {
            $rows = (int) $qb->select('count(*) as records')
                ->from(MAUTIC_TABLE_PREFIX . 'worlds', 'w')
                ->where(
                    $qb->expr()->gte('w.date_added', ':date')
                )
                ->execute()
                ->fetchColumn();
        } else {
            $rows = (int) $qb->delete(MAUTIC_TABLE_PREFIX . 'worlds')
                ->where(
                    $qb->expr()->lte('date_added', ':date')
                )
                ->execute();
        }
$event->setStat($this->translator->trans(‘mautic.maintenance.hello_world’), $rows, $qb->getSQL(), $qb->getParameters());

}

}