验证规则中的“非”运算符
Posted
技术标签:
【中文标题】验证规则中的“非”运算符【英文标题】:"Not" operator in validation rule 【发布时间】:2015-10-10 05:00:15 【问题描述】:我有一个自定义验证规则 is_admin
,用于检查用户是否为管理员。
Laravel 是否有一个“相反的”运算符(就像 !
在 php 中的工作方式一样),这样我就可以做类似 not:is_admin
的事情,它会检查用户 不是管理员:
$rules = array(
'user_id' => 'required|numeric|not:is_admin'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
// return error
else
// continue
谢谢。
【问题讨论】:
无法否定验证规则。你只需要为is_not_admin
写一个单独的规则:)。
不幸的是,这是真的。请记住重用现有的 is_admin 规则: function is_not_admin(args...) = !is_admin(args...)
【参考方案1】:
是的,我们可以在规则数组上使用条件语句。
$rules 是我们传递给验证类或在请求类中定义的数组。
示例 #1:
public function rules
//here we return an array of rules like shown below.
return [
'field_a' => 'required',
'field_b' => 'required',
];
//we can add any operator by a little change.
save validation rules array in variable like shown below.
$rules = [
'field_a' => 'required',
'field_b' => 'required',
];
//now we can add any rule in $rules array using common ways of writing conditional statements.
//For example field_c is required only when field_a is present and field_b is not
if(isset($this->field_a) && !isset($this->field_b))
$rules['field_c' => 'required'];
//we can apply any kind of conditional statement and add or remove validation rules on the basis of our business logic.
示例#2
public function rules()
$rules = [];
if ($this->attributes->has('some-key'))
$rules['other-key'] = 'required|unique|etc';
if ($this->attributes->get('some-key') == 'some-value')
$rules['my-key'] = 'in:a,b,c';
if ($this->attributes->get('some-key') == 'some-value')
$this->attributes->set('key', 'value');
return $rules;
【讨论】:
【参考方案2】:是的,您可以通过required_if:field,value
进行验证。
您可以在http://laravel.com/docs/5.0/validation#rule-required-if查看更多详情
或者您可以使用not_in:foo,bar
。
您可以在http://laravel.com/docs/5.0/validation#rule-not-in查看更多详情
【讨论】:
以上是关于验证规则中的“非”运算符的主要内容,如果未能解决你的问题,请参考以下文章