正如问题标题所述:

在判断Laravel的内置验证器类时,我可以看到它使用$this->data来访问其他属性;但是,您不能直接在Validator::extend所需的闭包中使用$this.

手动扩展验证器类(通过自定义类)似乎是唯一的 Select ...我说得对吗?如果是这样的话,在我看来,这似乎是将验证器转换为包的一个严重限制,因 for each 包都会扩展基本验证器类,PHP最终只会保留最后定义的扩展(从而导致其他验证器包无法使用……).还是我错过了什么?

谢谢

EDIT

我还试图用Jason Lewis写的this method分后的一个包来包装它,但我一直得到一个BadMethodCallException分,说明找不到验证方法...该软件包符合psr-0,我很确定这不是名称空间问题.

推荐答案

经过一点测试后,如果使用的是类而不是回调,则可以访问该array.因为它扩展了Validator类.

class TestRulesValidator extends \Illuminate\Validation\Validator
{

    public function validateTestRule($attribute, $value, $parameters)
    {
        var_dump($this->data);

        exit();
    }

}

validation documentation开始,使用:

Validator::resolver(function($translator, $data, $rules, $messages) {
    return new TestRulesValidator($translator, $data, $rules, $messages);
});

你的名字应该是test_rule.删除validate关键字并转换为下划线大小写.

刚刚在新安装的设备上测试过,效果很好.

Edit-您也可以使用normal extend方法并传递一个额外的参数.

class TestRulesValidator
{

    public function validateTestRule($attribute, $value, $params, $validator) {
        var_dump($validator->getData());
    }

}

Validator::extend('test_rule', 'TestRulesValidator@validateTestRule');

Laravel相关问答推荐

Laravel Livewire与自定义JS有关的多姆问题

密码确认在Livewire中不匹配

查询Laravel中的图形

Dompdf 古吉拉特语和印地语文本未正确显示

将错误消息抛出并显示为关联数组

未定义防护 [api] 的授权驱动程序 [api]

如何从@foreach 循环中捕获所有数据并将其传递给 值? - Laravel

调用字符串上的成员函数

验证规则 required_if 与其他条件(Laravel 5.4)

Laravel 5 make:控制器在应用程序文件夹而不是控制器文件夹中创建控制器

laravel 中的 Http Post 使用 fetch api 给出 TokenMismatchException

Laravel 5:在同一字符串上使用 bcrypt 给出不同的值

Laravel 5 环境配置数组?

在 Laravel 测试用例中模拟一个 http 请求并解析路由参数

Select,where JSON 包含数组

如何在 Laravel 4 中组织不同版本的 REST API 控制器?

如何在 laravel 用户删除中重置自动增量?

在 laravel Passport 客户端应用程序中使用访问令牌获取用户数据

如何在特定项目中禁用初始化 JS/TS 语言功能?

Laravel 4 控制器模板/Blade - 正确的方法?