Я обновляю приложение Laravel с 4 до 5. Однако у меня есть специальный валидатор, который я не могу получить.
В L4 я сделал файл validators.php и включил его в файл global.php, используя require app_path().'/validators.php';
,
Я попытался сделать то же самое в L5. Я удалил валидатор в приложении / Validators / Validators.php и обновил свой composer.json .
"files": [ "app/Validators/Validators.php" ]
Однако теперь на любой странице ничего не отображается. Что я сделал не так?
Попробуйте следующее:
ServiceProvider
. 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
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. иначе вы получите белую страницу с сообщением об ошибке «Запрещено».
Я добавил правило под rules()
функции rules()
, вот что он выглядит
public function rules() { return [ 'activeuntil' => 'today_onwards' ]; }
today_onwards
– это моя новая проверка.
Я создал папку под названием «Службы» в папке «Приложение»
Я создал файл с именем «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».
Я добавил код ниже в app\Providers\AppServiceProvider.php
внутри метода boot()
.
Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); });
Не забудьте добавить ниже библиотеку, один из них – класс Validator, а другой – ваш собственный класс, который является « ValidatorExtended
».
use App\Services\ValidatorExtended; use Illuminate\Support\Facades\Validator;
Вот как выглядит весь файл, [ 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() { // } }
Вот и все. сделанный. вы создали свою собственную проверку.
Кроме того, если вы хотите использовать его в своем контроллере, ниже приведен код:
class testController extends Controller { public function updatePass(MiscValidation $request){ //code here } }
Вместо использования класса Request вы используете свой собственный класс, который является расширением класса Request.