Php Laravel 5中的自定义验证器

Php Laravel 5中的自定义验证器,php,validation,laravel,laravel-5,Php,Validation,Laravel,Laravel 5,我正在将我的Laravel应用程序从4升级到5。但是,我有一个自定义验证器,我无法使用它 在L4中,我创建了一个validators.php文件,并使用require app_path()。/validators.php'将其包含在global.php中 我试着在L5中做一些相同的事情。我在app/Validators/Validators.php中删除了一个验证器,并更新了composer.json 但是,现在任何页面上都不会呈现任何内容。我做错了什么?尝试以下方法: 创建一个绑定类,在其中可

我正在将我的Laravel应用程序从4升级到5。但是,我有一个自定义验证器,我无法使用它

在L4中,我创建了一个validators.php文件,并使用
require app_path()。/validators.php'将其包含在global.php中

我试着在L5中做一些相同的事情。我在app/Validators/Validators.php中删除了一个验证器,并更新了composer.json

但是,现在任何页面上都不会呈现任何内容。我做错了什么?

尝试以下方法:

  • 创建一个绑定类,在其中可以实现要扩展的每个规则
    Validator
  • 创建扩展
    服务提供商的服务提供商
  • config/app.php
    文件中添加自定义验证程序提供程序
  • 您可以在
    Services
    文件夹中创建绑定,如下所示:

    namespace MyApp\Services;
    
    class Validator extends \Illuminate\Validation\Validator{
    
        public function validateFoo($attribute, $value, $parameters){  
            return $value == "foo"
        }
    }
    
    然后,使用服务提供商扩展核心:

    namespace MyApp\Providers;
    
    use MyApp\Services\Validator;
    use Illuminate\Support\ServiceProvider;
    
    class ValidatorServiceProvider extends ServiceProvider{
    
        public function boot()
        {
            \Validator::resolver(function($translator, $data, $rules, $messages)
            {
                return new Validator($translator, $data, $rules, $messages);
            });
        }
    
        public function register()
        {
        }
    }
    
    最后,在
    config/app.php
    导入您的服务提供商,如下所示:

    'providers' => [
        ...
        ...
        'MyApp\Providers\ValidatorServiceProvider';
    ]
    

    下面是我在添加自定义验证时所做的。这是给拉威尔5.1的

  • 运行
    PHP Artisan make:request MyFormValidationRequest
    文件是在
    app\Requests\MyFormValidationRequest.PHP
  • 以下是初始代码:

    <?php
    
    namespace App\Http\Requests;
    use App\Http\Requests\Request;
    
    class MyFormValidationRequest extends Request
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
    
            return [
                //
    
            ];
        }
    }
    
    从今天开始
    是我的新验证

  • 我在应用文件夹下创建了一个名为“服务”的文件夹

  • 我在App\Services文件夹下创建了一个名为“ValidatorExtended.php”的文件,下面是代码:

     <?php 
    
         namespace App\Services;     
         use Illuminate\Validation\Validator;
         use Carbon\Carbon;
    
         class ValidatorExtended extends Validator {
    
             private $_custom_messages = array(        
                 "today_onwards" => "The :attribute must be today onwards",
             );
    
             public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
                 parent::__construct( $translator, $data, $rules, $messages, $customAttributes );
    
                 $this->_set_custom_stuff();
             }
    
             protected function _set_custom_stuff() {
                 //setup our custom error messages
                 $this->setCustomMessages( $this->_custom_messages );
             }
    
             protected function validateTodayOnwards( $attribute, $value ) {     
                 $now =  strtotime('-1 day');
                 $valueDateFormat =  strtotime($value);
    
                 if($valueDateFormat > $now){
                     return true;
                 }
                 else {
                     return false;
                 }        
            }
        }
    
  • 不要忘记在下面添加库,一个是Validator类,另一个是您自己的类,即“
    ValidatorExtended

  • 下面是整个文件的样子,[
    app\Providers\AppServiceProvider.php
    ]

    <?php
    
        namespace App\Providers;
    
        use Illuminate\Support\ServiceProvider;
        use App\Services\ValidatorExtended;
        use Illuminate\Support\Facades\Validator;
    
        class AppServiceProvider extends ServiceProvider
        {
        /**
         * Bootstrap any application services.
         *
         * @return void
        */
             public function boot()
             {
                 //
                 Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
                 {
                     return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
                 });
             }
    
             /**
              * Register any application services.
              *
              * @return void
             */
             public function register()
             {
                //
            }
        } 
    

  • 您没有使用请求类,而是使用您自己的类,它是请求类的扩展。

    检查您的日志-
    app/storage/logs/laravel.log
    和/或您的Web服务器的日志文件。您是否运行了
    composer dump autoload
    ?@ceejayoz失败时不会记录任何内容。卢卡斯盖特:是的,我工作得很有魅力。谢谢你,很好!很高兴能帮助您为什么文档中没有涵盖这一点?!!关于整个主题,它有三段文字。@manix我希望我早一点看到这个。我刚刚在这里发布了一个类似(但不同)的答案:我必须展示如何使用其他输入,所以我想这是值得的。只需花2天时间处理这个****,而用本机PHP编写它需要几秒钟。。。该死,拉威尔!很抱歉,步骤9无法使代码格式化工作,请提供任何帮助。附加说明:如果您尝试验证的字段为空,则自定义验证将不起作用。
     <?php 
    
         namespace App\Services;     
         use Illuminate\Validation\Validator;
         use Carbon\Carbon;
    
         class ValidatorExtended extends Validator {
    
             private $_custom_messages = array(        
                 "today_onwards" => "The :attribute must be today onwards",
             );
    
             public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
                 parent::__construct( $translator, $data, $rules, $messages, $customAttributes );
    
                 $this->_set_custom_stuff();
             }
    
             protected function _set_custom_stuff() {
                 //setup our custom error messages
                 $this->setCustomMessages( $this->_custom_messages );
             }
    
             protected function validateTodayOnwards( $attribute, $value ) {     
                 $now =  strtotime('-1 day');
                 $valueDateFormat =  strtotime($value);
    
                 if($valueDateFormat > $now){
                     return true;
                 }
                 else {
                     return false;
                 }        
            }
        }
    
    Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
    {
        return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
    });
    
    use App\Services\ValidatorExtended;
    
    use Illuminate\Support\Facades\Validator;
    
    <?php
    
        namespace App\Providers;
    
        use Illuminate\Support\ServiceProvider;
        use App\Services\ValidatorExtended;
        use Illuminate\Support\Facades\Validator;
    
        class AppServiceProvider extends ServiceProvider
        {
        /**
         * Bootstrap any application services.
         *
         * @return void
        */
             public function boot()
             {
                 //
                 Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array())
                 {
                     return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes);
                 });
             }
    
             /**
              * Register any application services.
              *
              * @return void
             */
             public function register()
             {
                //
            }
        } 
    
    class testController extends Controller
    {
        public function updatePass(MiscValidation $request){
            //code here
        }
    }