Перейти к содержанию

TopicPattern

Шаблон топика — то, что пишется в маршруте вместо точного имени события.

Шаблон состоит из сегментов через точку. Каждый сегмент — одно из:

Сегмент Что совпадает Пример
order ровно этот текст, с учётом регистра order
{order_id} любой один сегмент, значение — в параметр 42 → order_id = '42'
{order_id:\d+} один сегмент, целиком подходящий под regex 42, но не abc
* любой один сегмент 42, abc
# ноль или больше любых сегментов ничего, 42, 42.payment.failed

Параметр, * и # занимают сегмент целиком: order-{id} и ord* — ошибка. Имя параметра — snake_case: строчные латинские буквы, цифры и _, начинается с буквы.

Шаблон компилируется в одно регулярное выражение, как маршруты в FastRoute и Symfony Routing: order.{order_id:\d+}.# → ^\.order\.(?=(?:\d+)(?:\.|$))(?P<order_id>[^.]+)(?:\.[^.]+)*$.

$pattern = TopicPattern::fromString('order.{order_id:\d+}.#');

$pattern->match('order.42.paid');          // ['order_id' => '42']
$pattern->match('order.42');               // ['order_id' => '42'] — # совпадает и с нулём сегментов
$pattern->match('order.abc.paid');         // null — abc не подходит под \d+

  • Full name: \Selyusize\EventsRouter\Topic\TopicPattern
  • This class is marked as final and can't be subclassed
  • This class is a Final class

Methods

fromString

Разобрать шаблон и скомпилировать его в регулярное выражение.

public static fromString(string $pattern): self
  • This method is static. Parameters:
Parameter Type Description
$pattern string

Throws:

если шаблон записан с ошибкой - InvalidTopicPattern


getPattern

Исходная строка шаблона.

public getPattern(): non-empty-string

match

Сопоставить топик с шаблоном.

public match(string $topic): array<non-empty-string,non-empty-string>|null

Parameters:

Parameter Type Description
$topic string

Return Value:

параметры (пустой массив, если их нет) или null, если топик не подходит