Пользовательский валидатор в Laravel 5

Я обновляю приложение Laravel с 4 до 5. Однако у меня есть специальный валидатор, который я не могу получить.

В L4 я сделал файл validators.php и включил его в файл global.php, используя require app_path().'/validators.php'; ,

Я попытался сделать то же самое в L5. Я удалил валидатор в приложении / Validators / Validators.php и обновил свой composer.json .

 "files": [ "app/Validators/Validators.php" ] 

Однако теперь на любой странице ничего не отображается. Что я сделал не так?

Попробуйте следующее:

  1. Создайте класс связывания, в котором вы можете реализовать каждое правило, которое вы хотите расширить.
  2. Сделайте поставщика услуг, который расширяет ServiceProvider .
  3. Добавьте свой собственный поставщик валидатора в файл 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'; ] 

так вот что я сделал при добавлении пользовательской проверки. это для laravel 5.1

  1. запустить PHP Artisan make:request MyFormValidationRequest Файл 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 [ // ]; } } 

ВАЖНО : измените возвращаемое значение метода authorize() на true, если вы не выполняете аутентификацию. это начальное значение false. иначе вы получите белую страницу с сообщением об ошибке «Запрещено».


  1. Я добавил правило под rules() функции rules() , вот что он выглядит

     public function rules() { return [ 'activeuntil' => 'today_onwards' ]; } 

today_onwards – это моя новая проверка.

  1. Я создал папку под названием «Службы» в папке «Приложение»

  2. Я создал файл с именем «ValidatorExtended.php» в папке App \ Services, вот код ниже:

      <?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; } } } 

Примечание: метод validateTodayOnwards – это место, где вы ставите свою логику. имя метода всегда должно начинаться с «validate», а затем на имя нового ключа проверки, который должен быть в заголовке,

Еще одно примечание: ваш ключ проверки должен быть разделен символом подчеркивания и всеми маленькими буквами, в данном случае «today_onwards». символ подчеркивания должен быть помещен перед всеми прописными буквами в имени метода. Надеюсь, я объяснил это хорошо.

Метод TodayOnwards эквивалентен имени проверки «today_onwards»,

другой пример, если я создал validateOldPassword, ваш ключ проверки должен быть «old_password».

  1. Я добавил код ниже в app\Providers\AppServiceProvider.php внутри метода boot() .

     Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); }); 
  2. Не забудьте добавить ниже библиотеку, один из них – класс Validator, а другой – ваш собственный класс, который является « ValidatorExtended ».

     use App\Services\ValidatorExtended; use Illuminate\Support\Facades\Validator; 
  3. Вот как выглядит весь файл, [ 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() { // } } 
  4. Вот и все. сделанный. вы создали свою собственную проверку.

  5. Кроме того, если вы хотите использовать его в своем контроллере, ниже приведен код:

     class testController extends Controller { public function updatePass(MiscValidation $request){ //code here } } 

Вместо использования класса Request вы используете свой собственный класс, который является расширением класса Request.