Validadores personalizados

Como crear un post validador

Ejemplo: PersonasForm.class.php

public function configure()
{
parent::configure();
$this->disableLocalCSRFProtection();
// Añado un post validator
$this->validatorSchema->setPostValidator(new formatoDocumentoValidatorSchema());
}

en lib/validator/ se crea el archivo formatoDocumentoValidatorSchema.class.php

el cual contiene

<?php
class formatoDocumentoValidatorSchema extends sfValidatorSchema
{

  protected function doClean($values)
  {

    $errorSchema = new sfValidatorErrorSchema($this);

    $errorSchema= $this->formato($values,'Personas');

    // lanza un error para el formulario principal
    if (count($errorSchema))
    {
      throw new sfValidatorErrorSchema($this, $errorSchema);
    }

    return $values;
  }

  protected function formato($values,$formulario)
  {
           $errorSchema = new sfValidatorErrorSchema($this);

        $errorSchemaLocal = new sfValidatorErrorSchema($this);

        // aqui se armaria el control donde se controla el formato
          if(condicion???){
           $errorSchemaLocal->addError(new sfValidatorError($this, 'Formato incorrecto DNI.'), $formulario['personas_numerodoc']);
           $errorSchema->addError($errorSchemaLocal, (string) $key);
          }
        return $errorSchema;
  }

}

si el control es medinte claves de base de datos, se puede usar declaracion en el esquema

Expedientes:
  actAs: 
    Timestampable: ~ 
    fzblameable: ~
  columns:
    numero:
      type: string(80)
      notnull: true
    anio:
      type: string(4)
      notnull: true
    caratula:
      type: string(200)
      notnull: true
    objeto:
      type: string()
    vigenciade:
      type: date()
      notnull: false
    a:
      type: date()
      notnull: false
    finalizado:
      type: boolean()
    visado:
      type: boolean()
    ultimo:
      type: boolean()
    user_id:
      type: integer
      notnull: true
      default: 1
  indexes:
    owner_name:
      fields: [numero, anio]   <------ esto indica que los campos numero y anio no deben repetirse
      type: unique
  relations:
    User:
      class: sfGuardUser
      local: user_id
Redmine Appliance - Powered by TurnKey Linux