| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | <?php namespace System\Validation;use System\Str;abstract class Nullable_Rule extends Rule {	/**	 * Indicates an empty value should be considered valid.	 *	 * @var bool	 */	public $allow_empty = false;	/**	 * Indicates null should be considered valid.	 *	 * @var bool	 */	public $allow_null = false;	/**	 * Evaluate the validity of an attribute.	 *	 * If this method returns a value, the child class will return it	 * as the result of the validation. Otherwise, the child class will	 * continue validating as normal.	 *	 * @param  string  $attribute	 * @param  array   $attributes	 * @return mixed	 */	public function check($attribute, $attributes)	{		// -------------------------------------------------------------		// If the attribute doesn't exist, the child's validation		// check will be be halted, and a presence_of error will be		// raised if null is not allowed.		// -------------------------------------------------------------		if ( ! array_key_exists($attribute, $attributes))		{			if ( ! $this->allow_null)			{				$this->error = 'presence_of';			}			return is_null($this->error);		}		// -------------------------------------------------------------		// Make sure the attribute is not an empty string. An error		// will be raised if the attribute is empty and empty strings		// are not allowed, halting the child's validation.		// -------------------------------------------------------------		elseif (Str::length((string) $attributes[$attribute]) == 0 and ! $this->allow_empty)		{			$this->error = 'presence_of';			return false;		}	}	/**	 * Allow a empty and null to be considered valid.	 *	 * @return Nullable_Rule	 */	public function not_required()	{		return $this->allow_empty()->allow_null();	}	/**	 * Allow empty to be considered valid.	 *	 * @return Nullable_Rule	 */	public function allow_empty()	{		$this->allow_empty = true;		return $this;	}	/**	 * Allow null to be considered valid.	 *	 * @return Nullable_Rule	 */	public function allow_null()	{		$this->allow_null = true;		return $this;	}}
 |