8

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

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

有任何想法吗?

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



class CustomValidator extends Illuminate\Validation\Validator {

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

5 回答 5

20

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

if(Input::has('address2')) {
    // Do something!
}
于 2014-09-26T05:11:09.303 回答
6

在 Laravel 5 中,

if($request->has('address2')){
  // do stuff
}
于 2017-08-20T14:05:07.287 回答
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 源代码中找到更多信息。

于 2013-09-16T07:56:19.263 回答
2

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

否则你可以这样做

$addr2=Input::get('address2');
if(isset($addr2)){
 //do here whatever you want
}else{
 //do something else
 $addr2='';//empty string
}
于 2013-07-03T18:49:48.430 回答
2

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

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

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

于 2016-05-13T01:35:45.147 回答