2010-06-24 09:40:05 +01:00
< ? php
2010-10-02 11:42:31 +01:00
/*
2011-01-15 13:29:43 +00:00
* This file is part of the Symfony package .
2010-10-02 11:42:31 +01:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-10-02 11:42:31 +01:00
*
2011-01-15 13:29:43 +00:00
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
2010-10-02 11:42:31 +01:00
*/
2011-01-15 13:29:43 +00:00
namespace Symfony\Component\Validator\Constraints ;
2011-05-19 08:34:54 +01:00
use Symfony\Component\Validator\Constraint ;
2012-07-11 17:19:09 +01:00
use Symfony\Component\Validator\Constraints\Collection\Required ;
use Symfony\Component\Validator\Constraints\Collection\Optional ;
use Symfony\Component\Validator\Exception\ConstraintDefinitionException ;
2011-05-19 08:34:54 +01:00
2011-07-20 09:37:57 +01:00
/**
* @ Annotation
*
* @ api
*/
2011-05-19 08:34:54 +01:00
class Collection extends Constraint
2010-06-24 09:40:05 +01:00
{
2010-06-24 10:24:08 +01:00
public $fields ;
public $allowExtraFields = false ;
public $allowMissingFields = false ;
2012-04-13 15:47:58 +01:00
public $extraFieldsMessage = 'This field was not expected.' ;
public $missingFieldsMessage = 'This field is missing.' ;
2010-06-24 09:40:05 +01:00
2011-03-31 14:36:04 +01:00
/**
* { @ inheritDoc }
*/
public function __construct ( $options = null )
{
// no known options set? $options is the fields array
if ( is_array ( $options )
&& ! array_intersect ( array_keys ( $options ), array ( 'groups' , 'fields' , 'allowExtraFields' , 'allowMissingFields' , 'extraFieldsMessage' , 'missingFieldsMessage' ))) {
$options = array ( 'fields' => $options );
}
parent :: __construct ( $options );
2012-07-11 17:19:09 +01:00
if ( ! is_array ( $this -> fields )) {
throw new ConstraintDefinitionException ( 'The option "fields" is expected to be an array in constraint ' . __CLASS__ );
}
foreach ( $this -> fields as $fieldName => $field ) {
if ( ! $field instanceof Optional && ! $field instanceof Required ) {
$this -> fields [ $fieldName ] = $field = new Required ( $field );
}
if ( ! is_array ( $field -> constraints )) {
$field -> constraints = array ( $field -> constraints );
}
foreach ( $field -> constraints as $constraint ) {
if ( ! $constraint instanceof Constraint ) {
throw new ConstraintDefinitionException ( 'The value ' . $constraint . ' of the field ' . $fieldName . ' is not an instance of Constraint in constraint ' . __CLASS__ );
}
if ( $constraint instanceof Valid ) {
throw new ConstraintDefinitionException ( 'The constraint Valid cannot be nested inside constraint ' . __CLASS__ . '. You can only declare the Valid constraint directly on a field or method.' );
}
}
}
2011-03-31 14:36:04 +01:00
}
2011-03-30 22:18:15 +01:00
public function getRequiredOptions ()
2010-06-24 10:24:08 +01:00
{
return array ( 'fields' );
}
2011-06-08 11:16:48 +01:00
}