2013-12-26 3 views
4

Скажем, у меня есть модель пользователя в Laravel вроде этого:пользовательской настройки в Laravel

class User extends Eloquent implements UserInterface, RemindableInterface { 

    public static $rules = array(
     'email' => 'required|email', 
     'password' => 'required|min:8|confirmed', 
     'password_confirmation' => 'required|min:8' 
    ); 

    ... 

} 

Правила, хранится в модели, будет повторно использован как для входа в системе и регистрации форм, но проблема возникает, когда нет необходимости в подтверждении пароля (например, в форме входа). И может быть много ситуаций, когда правила должны быть изменены.

Итак, есть ли какой-либо чистый метод, как изменить хранимые в моделях правила валидации для разных случаев в Laravel? Должен ли я вообще реорганизовать мой подход к хранению правил?

Спасибо!

ответ

12

Вы можете добавлять правила динамически, когда они вам понадобятся.

Например:

Если я прав, то вам нужно только password_confirmation правила при регистрации пользователя и при обновлении пароля. Итак, в вашей модели не добавляйте правило password_confirmation.

public static $rules = array(
     'email' => 'required|email', 
     'password' => 'required|min:8|confirmed' 

} 

Как добавить правило динамически:

Для регистрации пользователя требуется password_confirmation поле. Таким образом, с вашего контроллера вы всегда можете добавить следующие правила:

$rules = User::$rules; 

$rules['password_confirmation'] = 'required|min:8'; 

и иногда вам может потребоваться добавить правила на основе ввода пользователем.

Например:

Если пользователь выбирает Australia как страну, они должны также выбрать состояние.

$v = Validator::make($data, $rules)); 
$v->sometimes('state', 'required', function($input) 
{ 
    return $input->country == 'Australia'; 
}); 
+0

Спасибо за ваш ответ!Динамическое добавление правил - отличная идея, однако она не дает возможности добавлять/удалять определенные правила для определенных полей! Например, поле 'password' имеет правило' подтверждено' (определено в модели), но это правило должно быть удалено, когда подтверждение пароля не требуется! – arnisritins

+3

Вы не можете добавлять или удалять определенные правила, но вы можете установить правило снова, прежде чем использовать его. '$ rules ['password'] = 'required | min: 8';' – user1669496

10

Я делаю что-то вроде этого.

В модели:

public static $rules = [ 
    'create' => [ 
     'first_name' => 'min:3', 
     'last_name' => 'min:3', 
     'email'  => 'required|email|unique:users', 
     'password' => 'required|min:5|confirmed' 
     ], 
    'edit' => [ 
     'first_name' => 'other', 
     'last_name' => 'other', 
     'email'  => 'other', 
     'password' => 'other|min:5' 
     ] 
    ]; 

В контроллере:

$validator = Validator::make($input, User::$rules['edit']); # Or User::$rules['create'] 

if ($validator->fails()) { code } 
11

Поздно в игре, но в Laravel документы вы можете использовать 'иногда' правила.

http://laravel.com/docs/validation

Вкратце: В некоторых ситуациях, вы можете запустить проверку достоверности против поля, только если это поле присутствует во входном массиве. Для того, чтобы быстро сделать это, добавьте иногда править в список правил:

'password_confirmation' => 'sometimes|required|min:8|confirmed' 
0

Насколько я могу видеть Пылкий пакет ручки проверки модели хорошо Laravel> 5.0. Похоже, он поддерживает все встроенные функции проверки (например, использование «иногда», когда вы только хотите проверить поле, если оно передано), а также их расширение.

http://packalyst.com/packages/package/laravelbook/ardent

Смежные вопросы