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.

Original source