php - 输入验证互斥或

标签 php laravel laravel-4 laravel-validation

我有一个名为Answer的模型。

该模型有两个可能的关系。 QuestionProduct
但是,答案只能有一种关系。问题或产品。

有一种创建答案的表格。

该表格有三个输入。其中两个是<select>输入。另一个是文本输入,称为名称。

我希望我的验证只允许填写一次。

我当前的验证:

$validator = Validator::make(
    Input::all(),
    array('name' => array('required'))
);

$validator->sometimes('product', array('required', 'numeric'), function ($input) {
    return !is_numeric($input->question);
});

$validator->sometimes('question', array('required', 'numeric'), function ($input) {
    return !is_numeric($input->product);
});


要求至少填写一个所选内容,但也要允许两个。

因此,我的问题是:如何更改验证以仅允许填写其中一项选择。
但是必须始终填写其中之一。

选择1:

<select name="question" class="form-control">
    <option>None</option>
    <option value="1" selected="selected">Question 1</option>
    <option value="2">Question 2</option>
</select>


选择2:

<select name="product" class="form-control">
    <option>None</option>
    <option value="2" selected="selected">Product 1</option>
    <option value="3">Product 2</option>
</select>

最佳答案

首先。您必须在“无”选项中指定一个空值:

<option value=''>None</option>




您正在寻找XOR运算符,在这种情况下,您需要创建一个自定义验证规则:

Validator::extendImplicit('xor', function($attribute, $value, $parameters)
{
    if( $value XOR app('request')->get($parameters[0]))
        return true;
    return false;
});
Validator::replacer('xor', function($message, $attribute, $rule, $parameters)
{
    // add indefinite articles
    $IAattribute = (stristr('aeiou', $attribute[0]) ? 'an ' : 'a ') . $attribute;
    $parameters[0] = (stristr('aeiou', $parameters[0][0]) ? 'an ' : 'a ') . $parameters[0];

    if(app('request')->get($attribute))
        return 'You cannot choose both '.$IAattribute.' and '.$parameters[0].'.';
    return $IAattribute.' or '.$parameters[0].' is required.';
});


$validator = Validator::make(
    app('request')->all(),
    array('name' => array('required')
    ,'product' => array('xor:question')
));

关于php - 输入验证互斥或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547472/

相关文章:

php - 如何一次从多个表中获取数据?

php - 如何在 Laravel 中使用 NewsAPI

javascript - 如何使用 Vue.js 在 html 中制作 <select> 标签仅显示依赖于另一个 <select> 标签的一些数据

Laravel 外键下拉列表

php - 拉维尔 4 : Model Relationships Not Working (sort of)?

php - 如何使用php正则表达式

php - 如何将一个数字四舍五入到能被 16 整除的最接近的数字?

php - 限制传出 PHP+curl 请求的速率

php - 允许在 Laravel 5.4 中使用用户名或电子邮件登录

php - Laravel 按年份和月份生成存档帖子