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¶
Разобрать шаблон и скомпилировать его в регулярное выражение.
- This method is static. Parameters:
| Parameter | Type | Description |
|---|---|---|
$pattern |
string |
Throws:
если шаблон записан с ошибкой
- InvalidTopicPattern
getPattern¶
Исходная строка шаблона.
match¶
Сопоставить топик с шаблоном.
Parameters:
| Parameter | Type | Description |
|---|---|---|
$topic |
string |
Return Value:
параметры (пустой массив, если их нет) или null, если топик не подходит