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, и только числовые значения будут соответствовать заполнителю.