我有一個用戶可配置的下拉列表,用戶可以用它們自己的選項列表填充它。我想用in:foo,bar
驗證規則來驗證它。轉義Laravel驗證規則
不幸的是,這意味着有些人會選擇「是的,我願意」。如果我將下拉選項的分解列表傳遞給驗證規則,這顯然會打破驗證。
是否有可能擺脫Laravel的規則來避免這個問題?
我有一個用戶可配置的下拉列表,用戶可以用它們自己的選項列表填充它。我想用in:foo,bar
驗證規則來驗證它。轉義Laravel驗證規則
不幸的是,這意味着有些人會選擇「是的,我願意」。如果我將下拉選項的分解列表傳遞給驗證規則,這顯然會打破驗證。
是否有可能擺脫Laravel的規則來避免這個問題?
Validator類利用PHP的str_getcsv()來解析規則的屬性。該過程進行是這樣的:使用|
豎線分隔符(Validator::explodeRules()
)
:
冒號分隔符(Validator::parseRule()
)str_getcsv()
發送的屬性參數(Validator::parseParameters()
)這使您能夠像CSV文件一樣定義In:
選項的列表 - 每列都有引號!例如:
$input = ['foo' => 'Hello, world!'];
// Note the formatting of the `in:` options
$rules = ['foo' => 'required|in:"StackOverflow","Laravel","Hello, world!"',];
$v = Validator::make($input, $rules);
var_dump($v->passes()); // true
另外,請記住,像大多數事情Laravel一樣,您可以以任何適合您的應用程序的方式擴展Validator類。如果你想要更強大的功能,就不需要堅持「庫存」即買即用的選擇。 :)
嗚呼!這很完美,謝謝。 – ceejayoz
正如Cryode在他的回答中所說,Laravel將允許的值解碼爲CSV。這裏有一個幫助方法可以用來從一個字符串數組中產生這個CSV編碼的字符串,而不用擔心手動轉義的東西。
使用方法如下:
$validator = new Validator(Input::all(), [
'flavour' => [
'required',
ValidatorHelper::inRule([
"mint choc chip",
"rum and raisin",
"orange, peach and pineapple",
]),
],
]);
這是假設您是根據逗號爆,是否正確?你可以給他們一個textarea和內行換行字符嗎? (所以每行一個項目) – fideloper
@fideloper因爲Laravel的'in'規則需要用逗號分隔的值列表,所以我會用逗號內插。 Textarea沒有幫助,因爲用戶仍然可以在其中一行中輸入逗號。 – ceejayoz
爲什麼不在輸入驗證規則之前刪除任何逗號? – itachi