Расширение пользовательского класса валидации

Недавно я экспериментировал с Laravel 4 и стараюсь, чтобы пользовательский класс проверки работал.

Проверка-класс

<?php class CountdownEventValidator extends Validator { public function validateNotFalse($attribute, $value, $parameters) { return $value != false; } public function validateTimezone($attribute, $value, $parameters) { return !empty(Timezones::$timezones[$value]); } } 

Мои правила настроены следующим образом:

 protected $rules = [ 'title' => 'required', 'timezone' => 'timezone', 'date' => 'not_false', 'utc_date' => 'not_false' ]; 

Я вызываю валидатор внутри моей модели следующим образом:

 $validation = CountdownEventValidator::make($this->attributes, $this->rules); 

Я получаю следующую ошибку:

BadMethodCallException

Метод [validateTimezone] не существует.

Я искал довольно много учебников, но не смог узнать, что не так с моим кодом.

спасибо за помощь

Максимум

Solutions Collecting From Web of "Расширение пользовательского класса валидации"

Когда вы вызываете Validator::make вы на самом деле вызываете Illuminate\Validation\Factory::make хотя сам метод не статичен. Когда вы попадаете в класс Validator вы проходите через фасад, а на заднем плане вызов выглядит примерно так.

 App::make('validator')->make($this->attributes, $this->rules); 

Затем он возвращает экземпляр Illuminate\Validation\Validator .

Вы можете зарегистрировать свои собственные правила с помощью Validator::extend или зарегистрировать свой собственный резольвер. Я рекомендую, на данный момент вы просто расширяете валидатор своими собственными правилами, используя Validator::extend .

 Validator::extend('not_false', function($attribute, $value, $parameters) { return $value != false; }); 

Вы можете прочитать больше об этом и о том, как зарегистрировать свой собственный резольвер в официальной документации .

Эта функция должна быть статической? Что делать, если вы удалите static ?

 public function validateTimezone($attribute, $value, $parameters) { return !empty(Timezones::$timezones[$value]); }