FW/1 шаблон соответствует N цифр

Я пытаюсь сопоставить маршруты, где идентификаторы имеют ровно 6 номеров

Это не работает:

variables.framework.routes = [
    { "main/{id:[0-9]{6}}"  = "main/home/eid/:id"},
    { "main/home"                   = "main/home"},
    { "*"                           = "main/404"}
    ];

Это делает:

variables.framework.routes = [
    { "main/{id:[0-9]+}"    = "main/home/eid/:id"},
    { "main/home"                   = "main/home"},
    { "*"                           = "main/404"}
    ];

Второй, конечно, соответствует любому количеству цифр. Интересно, должен ли я избежать {

1 ответ

Решение

Похоже, что FW/1 допускает только ограниченный синтаксис регулярного выражения для объявления маршрутов. Поэтому я не думаю, что ваш первый пример сработает. Из того, что я мог найти, синтаксис ограниченного регулярного выражения в маршрутах был добавлен в FW/1 версии 3.5. Я нашел обсуждение этой темы и этот конкретный комментарий, описывающий запрашиваемое поведение - https://github.com/framework-one/fw1/issues/325

{placeholder:regex}, поэтому у нас может быть product/{id:[0-9]+}-:name.html, нацеленный на product.detail?id={id:[0-9]+}&name=:name.

  • Вам также необходимо повторить заполнитель с регулярным выражением в целевом маршруте (можно изменить).
  • Вы не можете вставить} в свое регулярное выражение для заполнителя.

Дайте мне знать, если PR приветствуется для этого дополнения.

Обратите внимание на второй пункт, который упоминает, что } (скобка) не допускается в регулярном выражении заполнителя.

Вот ссылка на код, на который ссылается тот pull-запрос, который был включен в 3.5 - https://github.com/framework-one/fw1/commit/9543b78552dbd27a526083ac72a3846bd86eeb90

А вот ссылка на обновленную документацию для версии 3.5, где была добавлена ​​некоторая информация об этой функции - http://framework-one.github.io/documentation/developing-applications.html

Фрагмент этого документа здесь:

Переменные-заполнители в маршруте идентифицируются либо по начальному двоеточию, либо по скобкам (с указанием имени переменной и регулярного выражения для ограничения совпадений) и могут также появляться, например, в URL-адресе. { "/product/:id" = "/product/view/id/:id" } определяет соответствие для / product / что-то, что будет обрабатываться так, как если бы URL был /product/view/id/ что-то - раздел: product, item: view, строка запроса id = что-то. Так же, { "/product/{id:[0-9]+}" = "/product/view/id/:id" } указывает соответствие для / product /42, которое будет обрабатываться так, как если бы URL был /product/view/id/42, и только числовые значения будут соответствовать заполнителю.

Другие вопросы по тегам