Как сделать необязательными правила Validator Laravel?

Предположим, у меня есть модель 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() для принудительной проверки.

Существует два способа сделать поле пользователя «необязательным» в опубликованном вами коде:

  1. Не устанавливайте «обязательный» в своих правилах для этого поля.

     'user' => 'unique:users|alpha_num', 
  2. Не переопределяйте метод 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 */ } }