我正在尝试注册自定义验证规则但它似乎不起作用。我需要填写2个字段中的任何一个。一个是URL(链接)字段,另一个是文件输入(file_upload)。 这是我的自定义验证:
Validator::register('file_check', function($attribute, $value, $parameters) {
if (!trim($value) == "" || array_get(Input::file($parameters[0]), 'tmp_name')) {
return true;
}
return false;
});
$messages = array(
'file_check' => 'Please upload a file or provide a link to files.',
);
$rules = array(
'link' => 'url|file_check:file_upload',
'file_upload' => 'mimes:jpg,jpeg,gif,png,psd,ai,bmp,xls,xlsx,doc,docx,zip,rar,7z,txt,pdf'
);
$validation = Validator::make(Input::all(), $rules, $messages);
if ($validation - > fails()) {
return Redirect::to('page') - > with_errors($validation - > errors) - > with_input();
}
需要帮助:)
EDITED
另外,我刚刚注意到验证规则应该接受“PSD”文件,但是当我尝试上传PSD文件时,它会重定向并显示错误“文件类型无效”。
答案 0 :(得分:6)
我可能在派对上迟到但可能有人会发现它很有用,以防你需要创建隐式规则,即使输入中没有字段也会被调用(如 required,required_if .... )使用
Validator::extendImplicit( 'validator_name', function($attribute, $value, $parameters)
{
});
答案 1 :(得分:5)
我自己就是在苦苦挣扎!事实证明except when a few specific rules are applied to them, Laravel doesn't pass empty fields through the Validator at all.所以自定义这个或那个规则不起作用,因为这两个字段中至少有一个可能对它不可见。
您可以通过从注册新规则方法转变为备用extend-the-Validator-class方法来解决这个问题。您的新类将继承标准Validator的所有方法,包括一个名为“implicit”的方法(您可以在标准Validator类的第215行找到原始方法),该方法指定Laravel应将字段传递给偶数的规则白名单如果他们是空的将新规则添加到该列表中,您应该很高兴。
答案 2 :(得分:0)
Jason是对的,但有一件事可能令人困惑。
Laravel注册了一条新规则'方法使用语法' Validator :: extend (......'。如其他地方所述,当您想要在特殊情况下进行自定义时,这很方便但是,如果你想添加一些可重用的规则,那么你可能想要使用extend-the-Validator-class方法。在这种情况下,如果你有一条规则有条件地要求某些东西,你需要覆盖现有的implicitRules数组,其中包含一个添加规则的新数组。
如果你添加的第一条规则没有条件要求,你会认为你已经钉了它,那么你将花费数小时试图弄清楚为什么你的新的' RequireWhenBlaBla ......'规则是不可见的。