使用Laravel检查验证期间输入中是否存在字段

时间:2013-07-03 14:24:38

标签: validation laravel laravel-4 isset

我想确保某些字段是作为表单的一部分发布的,但我不记得是否有些是空值。

“必需”验证规则不起作用,因为我很乐意接受空字符串。我已尝试过以下内容,但由于“address2”字段从未发送过,验证程序不会处理它。

有什么想法吗?

$rules = array(
     'address2' => 'attribute_exists'
);



class CustomValidator extends Illuminate\Validation\Validator {

    public function validateAttributeExists($attribute, $value, $parameters)
    {
        return isset($this->data[$attribute]);
    }
}

5 个答案:

答案 0 :(得分:14)

您可以使用Input::has('address2')检查地址2输入名称是否发布了某些内容。参见示例:

if(Input::has('address2')) {
    // Do something!
}

答案 1 :(得分:3)

您应该像这样制作自定义验证器。

use Symfony\Component\Translation\TranslatorInterface;

class CustomValidator extends Illuminate\Validation\Validator {

    public function __construct(TranslatorInterface $translator, $data, $rules, $messages = array())
    {
        parent::__construct($translator, $data, $rules, $messages);

        $this->implicitRules[] = 'AttributeExists';
    }

    public function validateAttributeExists($attribute, $value, $parameters)
    {
        return isset($this->data[$attribute]);
    }
}

这将使AttributeExists无需使用require即可工作。有关此问题的更多解释。如果要创建新的验证程序规则。如果您没有在$ implicitRules中设置它,那么如果您之前不使用require规则,那么该方法将无效。您可以在laravel源代码中找到更多信息。

答案 2 :(得分:2)

当您提交表单时,每个字段都被发布,事实上,如果您将某些字段留空,则该字段值为null或为空。只需检查POST参数一次,这样就可以在firefox中打开firebug控制台并提交表单,然后检查post参数。由于你想接受空字符串,任何规则的用途是什么?

否则你可以这样做

$addr2=Input::get('address2');
if(isset($addr2)){
 //do here whatever you want
}else{
 //do something else
 $addr2='';//empty string
}

答案 3 :(得分:2)

实际上,Laravel有一种方法可以验证属性是否存在,即使没有填充。

$rules = [
   'something' => 'present'
];

所有验证规则都存储在Validator类(/vendor/laravel/framework/src/Illuminate/Validation/Validator.php)中,您可以检查每个规则的实现,甚至没有记录规则。

答案 4 :(得分:1)

在Laravel 5中,

$(function(e) {
    var handler = function(e) {
        if (e.shiftKey) {
            $('.objects').draggable({
                disabled: false
            });
        } else {
            $('.objects').draggable({
                disabled: true
            });
        }
    };
    $(document).keydown(handler);
    $(document).keyup(handler);
});