定制 wazum/slug-cascade-contracts 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

wazum/slug-cascade-contracts

Composer 安装命令:

composer require wazum/slug-cascade-contracts

包简介

PSR-14 event interface for slug-cascade situations.

README 文档

README

PSR-14 event interface for slug-cascade situations.

An interface-only package. A producer dispatches an event implementing the interface when a parent page's slug has been (or is about to be) changed and descendants need their slugs adjusted. A consumer subscribes to the interface and can short-circuit synchronous propagation by calling deferCascade().

Install

composer require wazum/slug-cascade-contracts

PHP 8.1+. No framework dependency; works with any PSR-14 event dispatcher (TYPO3 v12/v13/v14, Symfony, Laminas, …).

The contract

namespace Wazum\SlugCascadeContracts;

use Psr\EventDispatcher\StoppableEventInterface;

interface SlugCascadeEvent extends StoppableEventInterface
{
    public function getPageId(): int;
    public function getOldParentSlug(): string;
    public function getNewParentSlug(): string;
    public function getCorrelationId(): string;
    public function deferCascade(): void;
}

deferCascade() flips isPropagationStopped() to true. The dispatch site reads that flag and skips its own synchronous cascade when a consumer has taken over.

Producer side

namespace Acme\Producer\Event;

use Wazum\SlugCascadeContracts\SlugCascadeEvent;

final class SlugChanged implements SlugCascadeEvent
{
    private bool $cascadeDeferred = false;

    public function __construct(
        public readonly int $pageId,
        public readonly string $oldParentSlug,
        public readonly string $newParentSlug,
        public readonly string $correlationId,
    ) {}

    public function getPageId(): int { return $this->pageId; }
    public function getOldParentSlug(): string { return $this->oldParentSlug; }
    public function getNewParentSlug(): string { return $this->newParentSlug; }
    public function getCorrelationId(): string { return $this->correlationId; }

    public function deferCascade(): void { $this->cascadeDeferred = true; }
    public function isPropagationStopped(): bool { return $this->cascadeDeferred; }
}

Dispatch site:

$event = new SlugChanged($pageId, $oldSlug, $newSlug, $correlationId);
$this->eventDispatcher->dispatch($event);
if ($event->isPropagationStopped()) {
    return;
}
$this->rebuildChildSlugsSynchronously(...);

Consumer side

namespace Acme\Consumer\EventListener;

use Wazum\SlugCascadeContracts\SlugCascadeEvent;

final class HandleCascade
{
    public function __invoke(SlugCascadeEvent $event): void
    {
        // … handle the cascade …
        $event->deferCascade();
    }
}

Service registration (TYPO3):

Acme\Consumer\EventListener\HandleCascade:
  tags:
    - name: event.listener
      event: Wazum\SlugCascadeContracts\SlugCascadeEvent

License

GPL-2.0-or-later

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: GPL-2.0-or-later
  • 更新时间: 2026-05-22

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固