Ограничение требований к параметрам маршрута Symfony - PullRequest
9 голосов
/ 19 июня 2010

Как выполнить требование, чтобы параметр в маршруте был строкой?

С учетом маршрута

my_foobar_route: url: / example / routing /: s1 /: id требования:{id: \ d +}

Может кто-нибудь напомнить мне, как заставить параметр s1 быть строкой?

Ответы [ 3 ]

13 голосов
/ 19 июня 2010

Вам просто нужно указать подходящее регулярное выражение:

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[a-zA-Z]+"

Редактировать : добавлены кавычки вокруг второго регулярного выражения; YAML интерпретирует [...] как массив параметров. Спасибо @ chiborg : -)

4 голосов
/ 26 мая 2011

Если вам все равно, что содержит строка или вы заранее не знаете, что она будет содержать, попробуйте следующее:

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[^/]+"

Это разрешит все символы, кроме символа '/'который используется в качестве разделителя для параметров.С помощью выражения

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[^/]{3,}"

вы можете сделать так, чтобы длина строки была не менее трех символов.

Не забывайте ставить регулярные выражения в квадратных скобках! Если вы их забудете, парсер YAML для маршрутов будет интерпретировать их как выражение массива.

0 голосов
/ 19 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...