[Validator] added support for plural messages

This commit is contained in:
Martin Hason 2011-04-14 11:48:15 +02:00 committed by Martin Hasoň
parent 1e3028d0d7
commit 345981f6b6
8 changed files with 32 additions and 16 deletions

View File

@ -20,14 +20,16 @@ class ConstraintViolation
{
protected $messageTemplate;
protected $messageParameters;
protected $messagePluralization;
protected $root;
protected $propertyPath;
protected $invalidValue;
public function __construct($messageTemplate, array $messageParameters, $root, $propertyPath, $invalidValue)
public function __construct($messageTemplate, array $messageParameters, $root, $propertyPath, $invalidValue, $messagePluralization = null)
{
$this->messageTemplate = $messageTemplate;
$this->messageParameters = $messageParameters;
$this->messagePluralization = $messagePluralization;
$this->root = $root;
$this->propertyPath = $propertyPath;
$this->invalidValue = $invalidValue;
@ -68,6 +70,14 @@ class ConstraintViolation
return $this->messageParameters;
}
/**
* @return integer|null
*/
public function getMessagePluralization()
{
return $this->messagePluralization;
}
/**
* Returns the violation message.
*

View File

@ -75,13 +75,13 @@ class ChoiceValidator extends ConstraintValidator
$count = count($value);
if ($constraint->min !== null && $count < $constraint->min) {
$this->context->addViolation($constraint->minMessage, array('{{ limit }}' => $constraint->min));
$this->context->addViolation($constraint->minMessage, array('{{ limit }}' => $constraint->min), null, (int) $constraint->min);
return false;
}
if ($constraint->max !== null && $count > $constraint->max) {
$this->context->addViolation($constraint->maxMessage, array('{{ limit }}' => $constraint->max));
$this->context->addViolation($constraint->maxMessage, array('{{ limit }}' => $constraint->max), null, (int) $constraint->max);
return false;
}

View File

@ -54,7 +54,7 @@ class MaxLengthValidator extends ConstraintValidator
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));
), null, (int) $constraint->limit);
return false;
}

View File

@ -54,7 +54,7 @@ class MinLengthValidator extends ConstraintValidator
$this->context->addViolation($constraint->message, array(
'{{ value }}' => $value,
'{{ limit }}' => $constraint->limit,
));
), null, (int) $constraint->limit);
return false;
}

View File

@ -56,10 +56,11 @@ class ExecutionContext
* @param string $message The error message.
* @param array $params The parameters parsed into the error message.
* @param mixed $invalidValue The invalid, validated value.
* @param integer|null $pluralization The number to use to pluralize of the message.
*
* @api
*/
public function addViolation($message, array $params = array(), $invalidValue = null)
public function addViolation($message, array $params = array(), $invalidValue = null, $pluralization = null)
{
$this->globalContext->addViolation(new ConstraintViolation(
$message,
@ -67,7 +68,8 @@ class ExecutionContext
$this->globalContext->getRoot(),
$this->propertyPath,
// check using func_num_args() to allow passing null values
func_num_args() === 3 ? $invalidValue : $this->value
func_num_args() === 3 ? $invalidValue : $this->value,
$pluralization
));
}
@ -79,8 +81,9 @@ class ExecutionContext
* @param string $message The error message.
* @param array $params The parameters parsed into the error message.
* @param mixed $invalidValue The invalid, validated value.
* @param integer|null $pluralization The number to use to pluralize of the message.
*/
public function addViolationAtPath($propertyPath, $message, array $params = array(), $invalidValue = null)
public function addViolationAtPath($propertyPath, $message, array $params = array(), $invalidValue = null, $pluralization = null)
{
$this->globalContext->addViolation(new ConstraintViolation(
$message,
@ -88,7 +91,8 @@ class ExecutionContext
$this->globalContext->getRoot(),
$propertyPath,
// check using func_num_args() to allow passing null values
func_num_args() === 4 ? $invalidValue : $this->value
func_num_args() === 4 ? $invalidValue : $this->value,
$pluralization
));
}
@ -100,8 +104,9 @@ class ExecutionContext
* @param string $message The error message.
* @param array $params The parameters parsed into the error message.
* @param mixed $invalidValue The invalid, validated value.
* @param integer|null $pluralization The number to use to pluralize of the message.
*/
public function addViolationAtSubPath($subPath, $message, array $params = array(), $invalidValue = null)
public function addViolationAtSubPath($subPath, $message, array $params = array(), $invalidValue = null, $pluralization = null)
{
$this->globalContext->addViolation(new ConstraintViolation(
$message,
@ -109,7 +114,8 @@ class ExecutionContext
$this->globalContext->getRoot(),
$this->getPropertyPath($subPath),
// check using func_num_args() to allow passing null values
func_num_args() === 4 ? $invalidValue : $this->value
func_num_args() === 4 ? $invalidValue : $this->value,
$pluralization
));
}

View File

@ -161,7 +161,7 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
->method('addViolation')
->with('myMessage', array(
'{{ value }}' => 'baz',
));
), null, null);
$this->assertFalse($this->validator->isValid('baz', $constraint));
}
@ -196,7 +196,7 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => 2,
));
), null, 2);
$this->assertFalse($this->validator->isValid(array('foo'), $constraint));
}
@ -214,7 +214,7 @@ class ChoiceValidatorTest extends \PHPUnit_Framework_TestCase
->method('addViolation')
->with('myMessage', array(
'{{ limit }}' => 2,
));
), null, 2);
$this->assertFalse($this->validator->isValid(array('foo', 'bar', 'moo'), $constraint));
}

View File

@ -101,7 +101,7 @@ class MaxLengthValidatorTest extends \PHPUnit_Framework_TestCase
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 5,
));
), null, 5);
$this->assertFalse($this->validator->isValid($value, $constraint));
}

View File

@ -101,7 +101,7 @@ class MinLengthValidatorTest extends \PHPUnit_Framework_TestCase
->with('myMessage', array(
'{{ value }}' => $value,
'{{ limit }}' => 5,
));
), null, 5);
$this->assertFalse($this->validator->isValid($value, $constraint));
}