Laravel 自定义类验证器:TranslatorInterface 不可实例化

Posted

技术标签:

【中文标题】Laravel 自定义类验证器:TranslatorInterface 不可实例化【英文标题】:Laravel custom class validator: TranslatorInterface is not instantiable 【发布时间】:2015-05-14 16:34:48 【问题描述】:

我对自定义类验证器有疑问。

这是我的 CustomValidator.php

<?php
use Illuminate\Validation\Validator;


class CustomValidator extends Validator 


    public function validateEmailExistence($attribute, $value, $parameters)
    
        //check email existence
    


这里在validators.php中调用类

Validator::extend('check_email', 'CustomValidator@validateEmailExistence');

在 bindings.php 中解析验证器

Validator::resolver(function($translator, $data, $rules, $messages)

    return new CustomValidator($translator, $data, $rules, $messages);
);

运行时出现此错误:

  Target [Symfony\Component\Translation\TranslatorInterface] is not instantiable.

如果我通过匿名函数扩展验证器,它工作正常。我知道这是接口绑定的问题,但我不知道应该使用哪个实现。

【问题讨论】:

【参考方案1】:

您的代码对我来说似乎没问题,但请尝试创建一个服务提供者并将其注册到应用配置文件中。

class ValidationServiceProvider extends ServiceProvider

    public function register()
    

    

    public function boot()
    
        $this->app->validator->resolver(function($translator, $data, $rules, $messages) 
            return new CustomValidator($translator, $data, $rules, $messages);
        );
    

注意:在创建服务提供者后执行 composer dumpauto。

如果您仍然收到错误,请告诉我。

【讨论】:

以上是关于Laravel 自定义类验证器:TranslatorInterface 不可实例化的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 FormRequest 自定义表单请求验证类

自定义laravel表单请求验证类(FormRequest共用一个rules())

Laravel 5.3 自定义验证消息数组

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

如何在 Laravel 5.5 中为选定的请求类设置自定义响应

Laravel 5.5 / 验证器 / 自定义规则