addValidator() public method

Add a validator the form element object.
public addValidator ( mixed $validator ) : Element
$validator mixed
return Element
Exemplo n.º 1
0
 /**
  * Set the field values. Optionally, you can apply filters
  * to the passed values via callbacks and their parameters
  *
  * @param  array $values
  * @param  array $filters
  * @return \Pop\Form\Form
  */
 public function setFieldValues(array $values = null, $filters = null)
 {
     // Filter values if passed
     if (null !== $values && null !== $filters) {
         $values = $this->filterValues($values, $filters);
     }
     // Loop through the initial fields values and build the fields
     // based on the _initFieldsValues property.
     if (count($this->initFieldsValues) > 0) {
         // If the fields are a group of fields
         $keys = array_keys($this->initFieldsValues);
         if (is_numeric($keys[0])) {
             $fields = array();
             foreach ($this->initFieldsValues as $ary) {
                 $k = array_keys($ary);
                 if (isset($k[0])) {
                     $this->groups[] = $k[0];
                 }
                 $fields = array_merge($fields, $ary);
             }
             $this->initFieldsValues = $fields;
         }
         foreach ($this->initFieldsValues as $name => $field) {
             if (is_array($field) && isset($field['type'])) {
                 $type = $field['type'];
                 $label = isset($field['label']) ? $field['label'] : null;
                 $required = isset($field['required']) ? $field['required'] : null;
                 $attributes = isset($field['attributes']) ? $field['attributes'] : null;
                 $validators = isset($field['validators']) ? $field['validators'] : null;
                 $expire = isset($field['expire']) ? $field['expire'] : 300;
                 $captcha = isset($field['captcha']) ? $field['captcha'] : null;
                 $data = isset($field['data']) ? $field['data'] : null;
                 if ($type == 'file') {
                     $this->hasFile = true;
                 }
                 if (isset($field['error'])) {
                     $error = array('container' => 'div', 'attributes' => array('class' => 'error'), 'pre' => false);
                     foreach ($field['error'] as $key => $value) {
                         if ($key != 'pre') {
                             $error['container'] = $key;
                             $error['attributes'] = $value;
                         } else {
                             if ($key == 'pre') {
                                 $error['pre'] = $value;
                             }
                         }
                     }
                 } else {
                     $error = null;
                 }
                 if (null !== $values && array_key_exists($name, $values)) {
                     if ($type == 'checkbox' || $type == 'radio' || $type == 'select') {
                         $value = isset($field['value']) ? $field['value'] : null;
                         $marked = $values[$name];
                     } else {
                         $value = $values[$name];
                         $marked = isset($field['marked']) ? $field['marked'] : null;
                     }
                 } else {
                     $value = isset($field['value']) ? $field['value'] : null;
                     $marked = isset($field['marked']) ? $field['marked'] : null;
                 }
                 // Initialize the form element.
                 switch (strtolower($type)) {
                     case 'checkbox':
                         $elem = new Element\Checkbox($name, $value, $marked);
                         break;
                     case 'radio':
                         $elem = new Element\Radio($name, $value, $marked);
                         break;
                     case 'select':
                         $elem = new Element\Select($name, $value, $marked, null, $data);
                         break;
                     case 'textarea':
                         $elem = new Element\Textarea($name, $value, $marked);
                         break;
                     case 'csrf':
                         $elem = new Element\Csrf($name, $value, $expire);
                         break;
                     case 'captcha':
                         $elem = new Element\Captcha($name, $value, $expire, $captcha);
                         break;
                     default:
                         $elem = new Element($type, $name, $value, $marked);
                 }
                 // Set the label.
                 if (null !== $label) {
                     $elem->setLabel($label);
                 }
                 // Set if required.
                 if (null !== $required) {
                     $elem->setRequired($required);
                 }
                 // Set if error display.
                 if (null !== $error) {
                     $elem->setErrorDisplay($error['container'], $error['attributes'], $error['pre']);
                 }
                 // Set any attributes.
                 if (null !== $attributes) {
                     foreach ($attributes as $a => $v) {
                         $elem->setAttributes($a, $v);
                     }
                 }
                 // Set any validators.
                 if (null !== $validators) {
                     if (is_array($validators)) {
                         foreach ($validators as $val) {
                             $elem->addValidator($val);
                         }
                     } else {
                         $elem->addValidator($validators);
                     }
                 }
                 $this->addElements($elem);
             }
         }
         // Else, set the passed values to the elements that
         // are already added to the form object
     } else {
         $fields = $this->getElements();
         if (null !== $values && count($fields) > 0) {
             foreach ($fields as $field) {
                 $fieldName = str_replace('[]', '', $field->getName());
                 if (isset($values[$fieldName])) {
                     // If a multi-value form element
                     if ($field->hasChildren()) {
                         $field->setMarked($values[$fieldName]);
                         $this->fields[$fieldName] = $values[$fieldName];
                         // Loop through the field's children
                         if ($field->hasChildren()) {
                             $children = $field->getChildren();
                             foreach ($children as $key => $child) {
                                 // If checkbox or radio
                                 if ($child->getAttribute('type') == 'checkbox' || $child->getAttribute('type') == 'radio') {
                                     if (is_array($field->getMarked()) && in_array($child->getAttribute('value'), $field->getMarked())) {
                                         $field->getChild($key)->setAttributes('checked', 'checked');
                                     } else {
                                         if ($child->getAttribute('value') == $field->getMarked()) {
                                             $field->getChild($key)->setAttributes('checked', 'checked');
                                         }
                                     }
                                     // If select option
                                 } else {
                                     if ($child->getNodeName() == 'option') {
                                         if (is_array($field->getMarked()) && in_array($child->getAttribute('value'), $field->getMarked())) {
                                             $field->getChild($key)->setAttributes('selected', 'selected');
                                         } else {
                                             if ($child->getAttribute('value') == $field->getMarked()) {
                                                 $field->getChild($key)->setAttributes('selected', 'selected');
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         // Else, if a single-value form element
                     } else {
                         $field->setValue($values[$fieldName]);
                         $this->fields[$fieldName] = $values[$fieldName];
                         if ($field->getNodeName() == 'textarea') {
                             $field->setNodeValue($values[$fieldName]);
                         } else {
                             $field->setAttributes('value', $values[$fieldName]);
                         }
                     }
                 }
             }
         }
     }
     if (null !== $this->errorDisplay) {
         $this->setErrorDisplay($this->errorDisplay['container'], $this->errorDisplay['attributes'], $this->errorDisplay['pre']);
     }
     return $this;
 }
Exemplo n.º 2
0
 public function testValidate()
 {
     $e = new Element('text', 'email');
     $e->addValidator(new Email());
     $e->setValue('*****@*****.**');
     $this->assertTrue($e->validate());
     $e = new Element('text', 'email');
     $e->addValidator(new Email());
     $e->setValue('testtest.com');
     $this->assertFalse($e->validate());
     $this->assertContains('class="error"', $e->render(true));
     $this->assertGreaterThan(0, count($e->getErrors()));
     $this->assertTrue($e->hasErrors());
 }