2

我正在尝试注册自定义验证规则,但它似乎不起作用。我需要填写 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();
}

需要帮忙 :)

已编辑

另外,我刚刚注意到验证规则应该接受“PSD”文件,但是当我尝试上传 PSD 文件时,它会重定向并显示错误“文件类型无效”。

4

3 回答 3

6

我可能迟到了,但可能有人会发现它很有用,以防您需要创建即使输入中不存在字段也会调用的隐式规则(如required,required_if ....)使用

Validator::extendImplicit( 'validator_name', function($attribute, $value, $parameters)
{

});

看一下这个

于 2015-02-25T19:24:31.823 回答
5

我自己只是在为此苦苦挣扎!事实证明,除了对它们应用一些特定规则时,Laravel 根本不会通过 Validator 传递空字段。因此,自定义的非此即彼规则不起作用,因为这两个字段中的至少一个字段可能对其不可见。

您可以通过从注册新规则方法转移到替代扩展验证器类方法来解决此问题。您的新类将继承标准 Validator 的所有方法,包括一个名为“implicit”的方法(您可以在标准 Validator 类的第 215 行找到原始方法),它指定了 Laravel 应将字段传递给甚至如果它们是空的。将您的新规则添加到该列表中,您应该一切顺利。

于 2013-03-28T19:47:17.350 回答
0

杰森是对的,但有一件事可能令人困惑。

Laravel 的“注册新规则”方法使用语法 'Validator:: extend (...'规则,那么你可能想使用扩展验证器类方法。在这种情况下,如果你有一个规则有条件地需要一些东西,你需要用一个新的添加规则来覆盖现有的隐式规则数组。

如果您添加的第一条规则不是有条件地要求,您会认为您已经确定了它,然后您将花费数小时试图找出为什么您的新“RequireWhenBlaBla...”规则是不可见的。

于 2014-07-22T00:02:14.390 回答