2010-06-19 49 views
8

如何強制要求路由中的參數是字符串?Symfony路由參數要求限制

鑑於路線

my_foobar_route: 網址:/例子/路由/:S1 /:ID 要求:{ID:\ d +}

誰能提醒我如何強制PARAM S1到是一個字符串?

回答

12

你只需要提供一個合適的正則表達式:

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

編輯:圍繞第二個正規表達式加引號; YAML將[...]解釋爲一組參數。由於@chiborg :-)

+1

只有在將正則表達式放在引號中後,這纔會起作用。 – chiborg 2011-05-26 08:32:50

+0

編輯,謝謝。總是忘記被解釋爲YAML數組的'[]',我通常在路由中使用的正則表達式總是以'\ d +';-)結尾 – richsage 2011-05-26 09:21:40

0

幾乎所有通過url傳遞的信息都是一個字符串 - 任何要求都比這更強,你不需要做任何事情,你的參數已經是一個字符串。也許你想要一個特殊格式的字符串?

4

如果你不在乎什麼字符串包含或者如果你事先不知道它會包含,請嘗試以下操作:

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解析器會將它們解釋爲數組表達式。