Туннели

Туннели

Туннель — это путь, разбитый на шаги — регистрация, оформление заказа, продление — который может меняться в зависимости от ответов посетителя. Пакет запоминает, на каком этапе находится каждый посетитель, пропускает их через доступные шаги и возвращает назад, когда они пытаются перескочить вперёд.

Дерево курсоров

Туннель строится как дерево, а не как список. Шаг, доступный из двух мест, — это два курсора, каждый со своим хешем и своими сохранёнными значениями: это позволяет одной ветке расти шагами, которых нет у другой, и то, как вы пришли, отображается в конце каждого туннеля.

Сессия в базе данных

Открытие туннеля создаёт сессию, которую браузер знает только по её id. Она хранит значения, которые сохраняются на шагах, и истекает через день после последнего показанного шага — или раньше, если этот шаг требует этого. Истекшие сессии удаляются планировщиком каждые 15 минут; завершённые и ожидающие сессии сохраняются.

Куда может пойти посетитель

Каждый шаг решает, можно ли его показать и куда отправить посетителя в противном случае. Ссылки и кнопки создаются по одним и тем же правилам, так что ссылка никогда не ведёт на перенаправление назад: нет кнопки «Далее», где дорога разветвляется, нет пути обратно после оплаты, нечего возвращать в закрытой сессии.

На что смотреть во время движения

Постепенщик Где вы находитесь, что позади, что впереди. Пробел обозначает, где дорога зависит от ещё не принятого решения.
За этим шагом Под каждым шагом отображается то, что только что сделала система, и её состояние: курсор, как завершается шаг, сессия и когда она истекает.
Панель разработчика и оболочка Вкладка Туннели в панели разработчика отображает сессию этого браузера на карте его туннеля; bin/console tunnels:info делает то же самое из оболочки.