2013-12-11 2 views
8

Я хочу создать собственное правило проверки. Моя модель выглядит, как это в данный момент:Правильное правило валидации Laravel 4 - где можно расширить валидатор?

protected $rules = array(
    'first_name' => 'required', 
    'last_name' => 'required', 
    'ssn'   => 'required|integer|min:4|max:4', 
    'email'  => 'required|email', 
    'dob'   => 'required|checkAge', 
    'phone'  => 'required', 
    'street'  => 'required', 
    'postal_code' => 'required|integer|min:4', 
    'city'  => 'required' 
); 

Но где я должен поставить пользовательские правила проверки? Я прочитал, что мне нужно расширить его. Для этого я создал простую функцию

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

И я не знаю, где я должен проверить?

Возможно, кто-то может мне помочь.

Благодаря

+0

Где мы должны положить в него в Laravel 5? – Yada

ответ

13

Я делаю это путем создания папки проверки в/приложении с любыми файлами пользовательских проверок в там ,
Я автоматически загружаю это путем редактирования app/start/global.php.

ClassLoader::addDirectories(array(
    app_path() . '/commands', 
    app_path() . '/controllers', 
    app_path() . '/models', 
    app_path() . '/presenters', 
    app_path() . '/validation', 
    app_path() . '/database/seeds', 
)); 

Я также зарегистрирую резольвер в этом файле;

Validator::resolver(function($translator, $data, $rules, $messages) { 
     return new CoreValidator($translator, $data, $rules, $messages); 
    }); 

Образец пользовательского класса валидатора (в папке проверки);

<?php 

class CoreValidator extends Illuminate\Validation\Validator 
{ 

    protected $implicitRules = array('Required', 'RequiredWith', 'RequiredWithout', 'RequiredIf', 'Accepted', 'RequiredWithoutField'); 

    public function __construct(\Symfony\Component\Translation\TranslatorInterface $translator, $data, $rules, $messages = array()) 
    { 
     parent::__construct($translator, $data, $rules, $messages); 
     $this->isImplicit('fail'); 
    } 

    public function validatePostcode($attribute, $value, $parameters = null) 
    { 
     $regex = "/^((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))$/i"; 
     if (preg_match($regex, $value)) { 
      return true; 
     } 
     return false; 
    } 
} 

И добавить пользовательское сообщение об ошибке в массиве в в приложение/языки/EN/validation.php

return array(
... 
"postcode" => "Invalid :attribute entered.", 
... 
) 
+0

Я также создал папку для проверки, такую ​​как, где я хотел бы поместить все свои материалы для проверки. Мне нравится отделять валидацию от моих моделей, потому что это кажется неаккуратным – Metropolis

8

Расширения могут быть добавлены как только сапоги применения. Что я могу сделать, чтобы создать validations.php файл в том же уровне routes.php и filters.php, а затем добавьте в мой app/start/global.php:

require app_path().'/filters.php'; /// this one is already there... 
require app_path().'/validations.php'; 
Смежные вопросы