我想确保某些字段是作为表单的一部分发布的,但我不记得是否有些是空值。
“必需”验证规则不起作用,因为我很乐意接受空字符串。我已尝试过以下内容,但由于“address2”字段从未发送过,验证程序不会处理它。
有什么想法吗?
$rules = array(
'address2' => 'attribute_exists'
);
class CustomValidator extends Illuminate\Validation\Validator {
public function validateAttributeExists($attribute, $value, $parameters)
{
return isset($this->data[$attribute]);
}
}
答案 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);
});