respect-validation/library/Rules/AbstractEnvelope.php
Henrique Moody 93e177a4c0
Make second argument of "AbstractEnvelope" optional
The argument "parameters" which is meant to give the wrapped rule's
exception some extra information does not always need to be defined, for
example when the exception does not need any parameter.

The current version of "AbstractEnvelope" required that argument and the
rules that are extending this class are passing an empty array.

This commit will make the "parameters" argument optional. As an extra,
it will make sure the tests from the children of "AbstractEnvelope" are
also covering their parent.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2018-11-25 15:30:40 +01:00

66 lines
1.5 KiB
PHP

<?php
/*
* This file is part of Respect/Validation.
*
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
*
* For the full copyright and license information, please view the "LICENSE.md"
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Respect\Validation\Rules;
use Respect\Validation\Exceptions\ValidationException;
use Respect\Validation\Validatable;
/**
* Abstract class that creates an envelope around another rule.
*
* This class is usefull when you want to create rules that use other rules, but
* having an custom message.
*
* @author Henrique Moody <henriquemoody@gmail.com>
*/
abstract class AbstractEnvelope extends AbstractRule
{
/**
* @var Validatable
*/
private $validatable;
/**
* @var array
*/
private $parameters;
/**
* Initializes the rule.
*
* @param Validatable $validatable
* @param array $parameters
*/
public function __construct(Validatable $validatable, array $parameters = [])
{
$this->validatable = $validatable;
$this->parameters = $parameters;
}
/**
* {@inheritdoc}
*/
public function validate($input): bool
{
return $this->validatable->validate($input);
}
/**
* {@inheritdoc}
*/
public function reportError($input, array $extraParameters = []): ValidationException
{
return parent::reportError($input, $extraParameters + $this->parameters);
}
}