Предположим, у меня есть модель User
с двумя методами:
User.php
class User extends Eloquent { /* Validation rules */ private static $rules = array( 'user' => 'unique:users|required|alpha_num', 'email' => 'required|email' ); /* Validate against registration form */ public static function register($data) { $validator = Validator::make($data, static::$rules); if($validator->fails()) { /*... do someting */ } else { /* .. do something else */ } } /* Validate against update form */ public static function update($data) { $validator = Validator::make($data, static::$rules); if($validator->fails()) { /*... do someting */ } else { /* .. do something else */ } } }
Мой вопрос : как я могу сделать правила валидации дополнительными, так что даже если данные для update()
будут просто полем email
, оно игнорирует user
и все еще проверяет true
.
Возможно ли это, или я что-то упускаю?
Извините за мой плохой английский.
Не уверен, что я правильно задаю вопрос, но если пользователь является необязательным, вы должны удалить «обязательный» из валидатора. Таким образом у вас будет:
'user' => 'unique:users|alpha_num',
вместо:
'user' => 'unique:users|required|alpha_num',
С другой стороны, я создаю собственный метод для своих моделей, который может возвращать пользовательские правила проверки в зависимости от входящих параметров.
Например:
private function getValidationRules($rules) { if ($rules == UPDATE_EMAIL) { return array('email' => 'required|email'); } else { return array( 'user' => 'unique:users|required|alpha_num', 'email' => 'required|email' ); } }
Я предполагаю, что это только личный выбор, но я обнаружил, что получение правил проверки с помощью метода позволяет больше контролировать то, что я действительно хочу проверить, особенно если вы хотите выполнить некоторые расширенные проверки.
Надеюсь, это поможет вам.
На складе Laravel вы можете вызвать update()
на модели, и он по умолчанию не будет проверяться, что даст вам желаемое поведение, которое вы описали. В опубликованном вами коде вы явно переопределяете метод update()
для принудительной проверки.
Существует два способа сделать поле пользователя «необязательным» в опубликованном вами коде:
Не устанавливайте «обязательный» в своих правилах для этого поля.
'user' => 'unique:users|alpha_num',
Не переопределяйте метод update()
для принудительной проверки перед обновлением.
Как насчет:
private static $rules = array( 'user' => 'unique:users|required|alpha_num', 'email' => 'required|email' ); private static $update_rules = array( 'user' => 'required|alpha_num', 'email' => 'required|email' ); * Validate against registration form */ public static function register($data) { $validator = Validator::make($data, static::$rules); if($validator->fails()) { /*... do someting */ } else { /* .. do something else */ } } /* Validate against update form */ public static function update($data) { $validator = Validator::make($data, static::$update_rules); if($validator->fails()) { /*... do someting */ } else { /* .. do something else */ } }