逃避Laravel验证规则

cee*_*yoz 0 php validation laravel

我有一个用户可配置的下拉列表,用户可以使用自己的选项列表填充它.我想用in:foo,bar这种验证规则来验证它.

不幸的是,这意味着有些人会选择"是的,我愿意"等选项.如果我将一个内联的下拉选项列表传递给验证规则,这显然会破坏验证.

是否有可能逃避Laravel的规则以避免这个问题?

Ake*_*rts 8

Validator类使用PHP的str_getcsv()来解析规则的属性.这个过程类似于:

  • 使用|管道分隔符(Validator::explodeRules())分解所有规则
  • 使用:冒号分隔符(Validator::parseRule())分解规则名称和参数
  • 通过str_getcsv()(Validator::parseParameters())发送属性

这使您能够In:以与CSV文件相同的方式定义选项列表- 每列都在引号中!这是一个例子:

$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
Run Code Online (Sandbox Code Playgroud)

另外,请记住,像大多数Laravel一样,您可以以适合您的应用程序的方式扩展Validator类.如果你想要更强大的东西,就没有必要坚持使用"库存"开箱即用的选项.:)