Browse Source

Added required_with validation rule to conditionally require an attribute based on the presence of another attribute

Signed-off-by: Jason Walton <jwalton512@gmail.com>
Jason Walton 12 years ago
parent
commit
6881bdaf02
2 changed files with 25 additions and 1 deletions
  1. 3 0
      laravel/documentation/validation.md
  2. 22 1
      laravel/validator.php

+ 3 - 0
laravel/documentation/validation.md

@@ -63,6 +63,9 @@ Now you are familiar with the basic usage of the Validator class. You're ready t
 
 	'name' => 'required'
 
+#### Validate that an attribute is present, when another attribute is present:
+	'last_name' => 'required_with:first_name'
+
 <a name="rule-alpha"></a>
 ### Alpha, Alpha Numeric, & Alpha Dash
 

+ 22 - 1
laravel/validator.php

@@ -214,7 +214,7 @@ class Validator {
 	 */
 	protected function implicit($rule)
 	{
-		return $rule == 'required' or $rule == 'accepted';
+		return $rule == 'required' or $rule == 'accepted' or $rule == 'required_with';
 	}
 
 	/**
@@ -257,6 +257,27 @@ class Validator {
 		return true;
 	}
 
+	/**
+	 * Validate that an attribute exists in the attributes array, if another
+	 * attribute exists in the attributes array.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validate_required_with($attribute, $value, $parameters)
+	{
+		$other = $parameters[0];
+
+		if ($this->validate_required($other, $this->attributes[$other]))
+		{
+			return $this->validate_required($attribute, $value);
+		}
+
+		return true;
+	}
+
 	/**
 	 * Validate that an attribute has a matching confirmation attribute.
 	 *