php - Laravel 验证 : Required only and only one field

标签 php validation laravel

我有两个字段,即数字和百分比。我希望用户只在一个输入字段中输入值。如果用户在数字和百分比字段中输入值,系统应该抛出验证错误。我们可以通过 Laravel 验证来实现这一点吗?

谢谢。

最佳答案

您可以为此编写一个自定义验证器: http://laravel.com/docs/5.0/validation#custom-validation-rules

它可能看起来像这样:

class CustomValidator extends Illuminate\Validation\Validator {

    public function validateEmpty($attribute, $value)
    {
        return ! $this->validateRequired($attribute, $value);
    }

    public function validateEmptyIf($attribute, $value, $parameters)
    {
        $key = $parameters[0];

        if ($this->validateRequired($key, $this->getValue($key))) {
            return $this->validateEmpty($attribute, $value);
        }

        return true;
    }
}

在服务提供商中注册:

Validator::resolver(function($translator, $data, $rules, $messages, $attributes)
{
    return new CustomValidator($translator, $data, $rules, $messages, $attributes);
});

使用它(例如,在表单请求中):

class StoreSomethingRequest extends FormRequest {
    // ...

    public function rules()
    {
        return [
            'percentage' => 'empty_if:number',
            'number'     => 'empty_if:percentage',
        ];
    }
}

更新 刚刚在 Tinker 中测试过:

Validator::make(['foo' => 'foo', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails()
=> true
Validator::make(['foo' => '', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails()
=> false
Validator::make(['foo' => '', 'bar' => 'bar'], ['foo' => 'empty_if:bar'])->fails()
=> false

关于php - Laravel 验证 : Required only and only one field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30635678/

相关文章:

php - 回滚mysql表然后再次迁移是否会在保存数据时出现问题?

php - 在 php 中使用 mysql 时出错

php - 免费的 RTE [富文本编辑器] 帮助需要集成它

android - 如何验证电话号码和金额

php - Laravel 验证 json 数据

mysql - Laravel db::select() 返回一个字符串结果

php - 将 SQL where CASE 查询转换为 Yii2 Active Record

php - 慢查询 - 多个连接和大量数据

php - CakePHP 3 Multiple isUnique 允许 NULL 重复

javascript - checkValidity 更新 UI