How to make Laravel's Validator $rules optional?
eloquent, laravel, laravel-4, php, validation
Solution
Not sure if I'm getting your question right but if the user is optional you should remove 'required' from the validator. This way you will have:
'user' => 'unique:users|alpha_num',
instead of:
'user' => 'unique:users|required|alpha_num',
On the other hand I create a custom method for my models that is able to return custom validation rules depending on incoming parameters.
For example:
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'
);
}
}
I guess it's only a personal choice, but I have found that getting the validation rules from a method allows more control over what I really want to validate, especially when you want to perform some advanced validations.
Hope it helps you.
Problem
Let's say I have `User` model with two methods: 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 */ } } } ``` My question: How can I make validation rules optional, so even if data for `update()` would be just `email` field, it would ignore `user` and still validate to `true`. Is this even possible or am I missing something? Sorry for my bad English.