<?php
class ValidationException extends \Exception { }
interface Validator
{
/**
* @param mixed $data
*
* @throws ValidationException
*/
public function validate($data);
}
class ValidatorComposite
{
/**
* @var Validator[]
*/
protected $validators;
public function addValidator(Validator $validator)
{
$this->validators[] = $validator;
}
public function validate($data)
{
$exceptions = [];
foreach ($this->validators as $validator)
{
try
{
$validator->validate($data);
}
catch (ValidationException $e)
{
$exceptions[] = $e->getMessage();
}
/** Now you have a list of exceptions that were thrown in $exceptions **/
return $exceptions;
}
}
}
class ArrayKeyExistsValidator implements Validator
{
protected $requiredKeys = [];
public function __construct(array $requiredKeys)
{
$this->requiredKeys = $requiredKeys;
}
public function validate($data)
{
if (!is_array($data))
{
// either try to convert to array or throw exception
}
foreach ($this->requiredKeys as $requiredKey)
{
/** recursively search your array for each key**/
// I'm doing non recursively here
if (!array_key_exists($requiredKey, $data))
{
throw new ValidationException(
sprintf('Key: "%s" not found in array: "%s"', $requiredKey, print_r($data, true))
);
}
}
}
}
// Object Usage
$composite = new ValidatorComposite;
$validator = new ArrayKeyExistsValidator(array('key1', 'key2'));
$composite->addValidator($validator);
$dataToValidate = array('LOL', 'key1', 'thereIsntAKey2');
$composite->validate($dataToValidate);
Parse error: syntax error, unexpected '[' in /in/s4MSY on line 29
Process exited with code 255.
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/s4MSY on line 3
Parse error: syntax error, unexpected '[' in /in/s4MSY on line 29
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/s4MSY on line 3
Parse error: parse error, unexpected '[' in /in/s4MSY on line 29
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/s4MSY on line 3
Parse error: syntax error, unexpected T_STRING in /in/s4MSY on line 5
Process exited with code 255.
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/s4MSY on line 3
Parse error: parse error, unexpected T_STRING in /in/s4MSY on line 5
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /in/s4MSY on line 3
Parse error: parse error in /in/s4MSY on line 5
Process exited with code 255.