Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Adicionando Validações em Formulários Dinâmicos Esse artigo abrange o Adianti Framework Web. Sendo assim, não o considere para aplicações GTK. Ele surgiu da necessidade de efetuar validações de acordo com as informações preenchidas num formulário. Se for do seu interesse desenvolver sistemas que permitam validações mais flexíveis e compatíveis com a dinâmica de um formulário, continue a leitura desse artigo. Desde sua primeir...
GF
Adicionando Validações em Formulários Dinâmicos  
Fechado
Esse artigo abrange o Adianti Framework Web. Sendo assim, não o considere para aplicações GTK. Ele surgiu da necessidade de efetuar validações de acordo com as informações preenchidas num formulário. Se for do seu interesse desenvolver sistemas que permitam validações mais flexíveis e compatíveis com a dinâmica de um formulário, continue a leitura desse artigo.

Desde sua primeira versão, o Adianti Framework permite acrescentar validações utilizando o método addValidation() sobre o campo no qual deseja-se validar. Os argumentos do método são específicos ao tipo de validação a ser feito. De maneira geral, os parâmetros passados são:

• o nome para descrever o campo (exemplo: “campo_1”) ;
• um objeto de validação (exemplo: “TRequiredValidator);
• parâmetros específicos do tipo de validação.

Isso é feito dentro do método construtor do componente TPage, e poderia ficar conforme o trecho de código abaixo:

  1. <?php
  2. $campo_1 = new TEntry(“campo_1”);
  3. $campo_1->addValidation(“campo_1”, new TRequiredValidator);
  4. ?>


Após adicionar os validadores é necessário invoca-los antes de persistir os dados do formulário. Isso é feito pelo método validate() presente na classe TForm, que invocará o validador presente em cada um dos campos. Isso pode ser notado no trecho de código abaixo:

  1. <?php
  2.     /**
  3.      * Validate form
  4.      */
  5.     public function validate()
  6.     {
  7.         // assign post data before validation
  8.         // validation exception would prevent
  9.         // the user code to execute setData()
  10.         $this->setData($this->getData());
  11.         
  12.         foreach ($this->fields as $fieldObject)
  13.         {
  14.             $fieldObject->validate();
  15.         }
  16.     }
  17. ?>


Se houver algum problema na validação uma exceção será disparada e o catch capturará a mesma exibindo a falha para o usuário.

Como se pôde notar é um processo simples e efetivo, além de ser aplicada na grande maioria dos formulários. No entanto, se você gosta de programar em Java Script, muito provavelmente vai abusar dessa linguagem na construção de sistemas. Então, notará que não será possível fazer uso desse tipo de validação. Para ilustrar, criou-se uma situação hipotética, porém muito frequente, onde há um campo em que poderá ser digitado tanto um CPF quanto um CNPJ, de acordo com o tipo de pessoa escolhido através de um TCombo. O trecho de código Java Script abaixo detalha essa situação.

$('select[name=\"tipopessoa_id\"]').change(function(event){ $('select[name=\"tipopessoa_id\"] > option:selected').each(function(){ tipoPessoa = $(this).text(); }); if(tipoPessoa.toLowerCase() == 'física') { $('label:contains(CNPJ:)').parent().css('left',82); $('label:contains(CNPJ:)').text('CPF:'); $('input[name=\"cpf_cnpj\"]').val(''); $('input[name=\"cpf_cnpj\"]').attr({onkeypress:'return entryMask(this,event,\"999.999.999-99\")'}); $('input[name=\"insc_estadual\"]').attr({class:'tfield_disabled',readonly:'1',value:''}); } if(tipoPessoa.toLowerCase() == 'jurídica') { $('label:contains(CPF:)').parent().css('left',75); $('label:contains(CPF:)').text('CNPJ:'); $('input[name=\"cpf_cnpj\"]').val(''); $('input[name=\"cpf_cnpj\"]').attr({onkeypress:'return entryMask(this,event,\"99.999.999/9999-99\")'}); $('input[name=\"insc_estadual\"]').attr({class:'tfield',readonly:false,value:''});; } });


Note que ao alterar o tipo de pessoa (action change do componente), o label é alterado, o campo é limpo e a máscara alterada. Isso porque uma pessoa física tem CPF e a pessoa jurídica tem CNPJ. Sendo assim, a maneira tradicional de validação não poderá ser aplicada, pois não é possível adivinhar se a pessoa a ser cadastrada é física ou jurídica. A solução é adicionar validadores no método do TPage onde serão persistidos os dados. Como o Framework foi muito bem desenvolvido, seus componentes apresentam um baixo grau de acoplamento, o que permite instanciar validadores e utiliza-los separadamente da classe TForm. O trecho de código permite detalhar a ideia.

  1. <?php
  2.             // Valida o CPF para pessoas físicas
  3.             if($object->tipopessoa_id == 1)
  4.             {                
  5.                 $validator = new TRequiredValidator;
  6.                 $validator->validate('CPF',$object->cpf_cnpj);  
  7.                 
  8.                 if($object->cpf_cnpj != '000.000.000-00')
  9.                 {
  10.                     $validator = new TCPFValidator;
  11.                     $validator->validate('CPF',$object->cpf_cnpj);
  12.                     
  13.                     $id $this->form->getField('id');
  14.                 
  15.                     $validator = new TUniqueValidator;
  16.                     $validator->validate('CPF',$object->cpf_cnpj,array('class'=>'Cliente','field'=>'cpf_cnpj','pk'=>$id)); 
  17.                 }  
  18.             }
  19.             
  20.             // Valida o CNPJ para pessoas jurídicas
  21.             if($object->tipopessoa_id == 2)
  22.             {
  23.                 $validator = new TRequiredValidator;
  24.                 $validator->validate('CNPJ',$object->cpf_cnpj); 
  25.                 
  26.                 if($object->cpf_cnpj != '00.000.000/0000-00')
  27.                 {
  28.                 
  29.                     $validator = new TCNPJValidator;
  30.                     $validator->validate('CNPJ',$object->cpf_cnpj);
  31.                     
  32.                     $id $this->form->getField('id');
  33.                     
  34.                     $validator = new TUniqueValidator;
  35.                     $validator->validate('CNPJ',$object->cpf_cnpj,array('class'=>'Cliente','field'=>'cpf_cnpj','pk'=>$id));     
  36.                 }
  37.             } 
  38. ?>


Considerando o trecho de código PHP acima, é notado que se for uma pessoa do tipo 1 (pessoa física), então é instanciado um objeto do tipo TRequiredValidator, pois o CPF é considerado um campo obrigatório. Após, é verificado se o campo é diferente de '000.000.000-00', pois muitas vezes o cliente pede que o CPF zerado seja permitido. Se for diferente, então é instanciado um TCPFValidator e feita a validação. Para finalizar é verificado se o CPF é único, utilizando a classe TUniqueValidator desenvolvida por esse autor. O mesmo é feito com o CNPJ, porém ao invés de utilizar a classe TCPFValidator, é utilizada a classe TCNPJValidator.

Esse artigo permitiu discutir a adição de validadores de acordo com o comportamento do formulário, e essa situação pode ser muito frequente quando o objetivo é garantir a usabilidade de um sistema. É claro que existem outras soluções para contornar a situação problema enunciada. Uma delas seria criar um formulário específico para pessoas físicas e outro para pessoas jurídicas. Porém esse autor acredita que o desenvolvimento web é feito com propriedade quando se domina juntamente com linguagens Back-end a linguagem Front-end Java Script. Ou outra, se for utilizada alguma tecnologia baseada em plugin, por exemplo, JavaFX, Silverlight, Flex, Unit, Director, etc. Sendo assim, não tenha medo em usar e abusar do Java Script em suas aplicações com Adianti Framework. Pois, como foi notado é possível facilmente validar campos com estados alterados dinamicamente pelo Java Script.

Coloco-me a disposição para dirimir qualquer dúvida e prestar qualquer esclarecimento. Espero que tenham gostado.




Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (12)


AS

bacana em, parabens pelo artigo
AC

Boa noite sou iniciante adiant framework e querendo aprender, você tem como me dar uma força aqui pois já fiz download e o gostaria de configura-o, preciso saber se funciona com xampp também ou preciso baixar só o apache, dúvidas de iniciante realmente...
PD

Ótimo artigo!
CF

Ei Guilherme,

Você poderia disponibilizar o seu TUniqueValidator?

Gostaria de saber como fez. Preciso de algo semelhante.
CS

Caro guilherme, como ficaria para apenas trocar a mascara dos campos de acordo com pessoa física ou jurídica?
Segue código:

  1. <?php
  2. /**
  3.  * OprCadastroGeralForm Form
  4.  * @author  Stclara
  5.  */
  6. class OprCadastroGeralForm extends TPage
  7. {
  8.     protected $form// form
  9.     
  10.     /**
  11.      * Form constructor
  12.      * @param $param Request
  13.      */
  14.     public function __construct$param )
  15.     {
  16.         parent::__construct();
  17.         
  18.         // creates the form
  19.         $this->form = new TQuickForm('form_OprCadastroGeral');
  20.         $this->form->class 'tform'// change CSS class
  21.         $this->form = new BootstrapFormWrapper($this->form);
  22.         $this->form->style 'display: table;width:100%'// change style
  23.         
  24.         // define the form title
  25.         $this->form->setFormTitle('Cadastro Geral');
  26.         
  27.         // create the form fields
  28.         $id = new TEntry('id');
  29.         $tipo = new TRadioGroup('tipo');
  30.         $nome = new TEntry('nome');
  31.         $endereco = new TEntry('endereco');
  32.         $numero = new TEntry('numero');
  33.         $bairro = new TEntry('bairro');
  34.         $cidade = new TEntry('cidade');
  35.         $uf = new TCombo('uf');
  36.         $cep = new TEntry('cep');
  37.         $cpf_cnpj = new TEntry('cpf_cnpj');
  38.         $rg_ie = new TEntry('rg_ie');
  39.         $fone1 = new TEntry('fone1');
  40.         $fone2 = new TEntry('fone2');
  41.         $fone3 = new TEntry('fone3');
  42.         $email = new TEntry('email');
  43.         $pessoa = new TCombo('pessoa');
  44.         $situacao = new TRadioGroup('situacao');
  45.         $cadastro = new TDate('cadastro');
  46.         
  47.         $tipo->setLayout('horizontal');
  48.         $situacao->setLayout('horizontal');
  49.         
  50.         $itens_tipo = array();
  51.         $itens_tipo['C'] = 'Cliente';
  52.         $itens_tipo['F'] = 'Fornecedor';
  53.         $tipo->addItems($itens_tipo);
  54.         
  55.         $itens_uf = array();
  56.         $itens_uf['AC'] = 'Acre';
  57.         $itens_uf['AL'] = 'Alagoas';
  58.         $itens_uf['AP'] = 'Amapá';
  59.         $itens_uf['AM'] = 'Amazonas';
  60.         $itens_uf['BA'] = 'Bahia';
  61.         $itens_uf['CE'] = 'Ceará';
  62.         $itens_uf['DF'] = 'Distrito Federal';
  63.         $itens_uf['ES'] = 'Espirito Santo';
  64.         $itens_uf['GO'] = 'Goiás';
  65.         $itens_uf['MA'] = 'Maranhão';
  66.         $itens_uf['MT'] = 'Mato Grosso';
  67.         $itens_uf['MS'] = 'Mato Grosso do Sul';
  68.         $itens_uf['MG'] = 'Minas Gerais';
  69.         $itens_uf['PA'] = 'Pará';
  70.         $itens_uf['PB'] = 'Paraiba';
  71.         $itens_uf['PR'] = 'Paraná';
  72.         $itens_uf['PE'] = 'Pernambuco';
  73.         $itens_uf['PI'] = 'Piauí';
  74.         $itens_uf['RJ'] = 'Rio de Janeiro';
  75.         $itens_uf['RN'] = 'Rio Grande do Norte';
  76.         $itens_uf['RS'] = 'Rio Grande do Sul';
  77.         $itens_uf['RO'] = 'Rondônia';
  78.         $itens_uf['RR'] = 'Roraima';
  79.         $itens_uf['SC'] = 'Santa Catarina';
  80.         $itens_uf['SP'] = 'São Paulo';
  81.         $itens_uf['SE'] = 'Sergipe';
  82.         $itens_uf['TO'] = 'Tocantins';
  83.         $uf->addItems($itens_uf);
  84.         
  85.         $pessoa_tipo = array();
  86.         $pessoa_tipo['F'] = 'Física';
  87.         $pessoa_tipo['J'] = 'Jurídica';
  88.         $pessoa->addItems($pessoa_tipo);
  89.         
  90.         $situacao_tipo = array();
  91.         $situacao_tipo['A'] = 'Ativo';
  92.         $situacao_tipo['I'] = 'Inativo';
  93.         $situacao->addItems($situacao_tipo);
  94.         // add the fields
  95.         $this->form->setFieldsByRow(2);
  96.         $this->form->addQuickField('Código:'$id,  250 );
  97.         $this->form->addQuickField('Tipo:'$tipo250);
  98.         $this->form->addQuickField('Pessoa:'$pessoa,  250 );
  99.         $this->form->addQuickField('Situação:'$situacao,  250 );
  100.         $this->form->addQuickField('Nome:'$nome,  250 );
  101.         $this->form->addQuickField('Endereço:'$endereco,  250 );
  102.         $this->form->addQuickField('Número:'$numero,  250 );
  103.         $this->form->addQuickField('Bairro:'$bairro,  250 );
  104.         $this->form->addQuickField('Cidade:'$cidade,  250 );
  105.         $this->form->addQuickField('UF:'$uf,  250 );
  106.         $this->form->addQuickField('CEP:'$cep,  250 );
  107.         $this->form->addQuickField('CPF / CNPJ:'$cpf_cnpj,  250 );
  108.         $this->form->addQuickField('RG / IE:'$rg_ie,  250 );
  109.         $this->form->addQuickField('Fone1:'$fone1,  250 );
  110.         $this->form->addQuickField('Fone2:'$fone2,  250 );
  111.         $this->form->addQuickField('Fone3:'$fone3,  250 );
  112.         $this->form->addQuickField('Email:'$email,  250 );
  113.         $this->form->addQuickField('Cadastro:'$cadastro,  230 );
  114.         
  115.         $script = new TElement('script'); 
  116.         $script->type 'text/javascript'
  117.         $javascript 
  118.         // personaliza os campos de acordo com o tipo de pessoa 
  119.         $('select[name="pessoa"]').change(function(event){ 
  120.         var tipoPessoa 
  121.         $('select[name="pessoa"] > option:selected').each(function(){ 
  122.         tipoPessoa = $(this).text(); 
  123.         }); 
  124.         if(tipoPessoa == 'F') { 
  125.         $('input[name="cpf_cnpj"]').val(''); 
  126.         $('input[name="cpf_cnpj"]').attr({onkeypress:'return entryMask(this,event,"999.999.999-99")'}); 
  127.         } 
  128.         if(tipoPessoa == 'J') { 
  129.         $('input[name="cpf_cnpj"]').val(''); 
  130.         $('input[name="cpf_cnpj"]').attr({onkeypress:'return entryMask(this,event,"99.999.999/9999-99")'}); 
  131.         } 
  132.         }); 
  133.         "
  134.         $script->add($javascript); 
  135.         parent::add($script); 
  136.         if (!empty($id))
  137.         {
  138.             $id->setEditable(FALSE);
  139.         }
  140.         
  141.         /** samples
  142.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  143.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  144.          $fieldX->setSize( 100, 40 ); // set size
  145.          **/
  146.          
  147.         // create the form actions
  148.         $this->form->addQuickAction(_t('Save'), new TAction(array($this'onSave')), 'fa:floppy-o');
  149.         $this->form->addQuickAction(_t('New'),  new TAction(array($this'onClear')), 'bs:plus-sign green');
  150.         $this->form->addQuickAction(_t('Back to the listing'), new TAction(array('OprCadastroGeralList','onReload')), 'fa:table blue');
  151.         
  152.         // vertical box container
  153.         $container = new TVBox;
  154.         $container->style 'width: 90%';
  155.         //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  156.         $container->add(TPanelGroup::pack('Cadastro Geral'$this->form));
  157.         
  158.         parent::add($container);
  159.     }
  160.     /**
  161.      * Save form data
  162.      * @param $param Request
  163.      */
  164.     public function onSave$param )
  165.     {
  166.         try
  167.         {
  168.             TTransaction::open('sigaweb'); // open a transaction
  169.             
  170.             /**
  171.             // Enable Debug logger for SQL operations inside the transaction
  172.             TTransaction::setLogger(new TLoggerSTD); // standard output
  173.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  174.             **/
  175.             
  176.             $this->form->validate(); // validate form data
  177.             
  178.             $object = new OprCadastroGeral;  // create an empty object
  179.             $data $this->form->getData(); // get form data as array
  180.             $object->fromArray( (array) $data); // load the object with data
  181.             $object->store(); // save the object
  182.             
  183.             // get the generated id
  184.             $data->id $object->id;
  185.             
  186.             $this->form->setData($data); // fill form data
  187.             TTransaction::close(); // close the transaction
  188.             
  189.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  190.         }
  191.         catch (Exception $e// in case of exception
  192.         {
  193.             new TMessage('error'$e->getMessage()); // shows the exception error message
  194.             $this->form->setData$this->form->getData() ); // keep form data
  195.             TTransaction::rollback(); // undo all pending operations
  196.         }
  197.     }
  198.     
  199.     /**
  200.      * Clear form data
  201.      * @param $param Request
  202.      */
  203.     public function onClear$param )
  204.     {
  205.         $this->form->clear();
  206.     }
  207.     
  208.     /**
  209.      * Load object to form data
  210.      * @param $param Request
  211.      */
  212.     public function onEdit$param )
  213.     {
  214.         try
  215.         {
  216.             if (isset($param['key']))
  217.             {
  218.                 $key $param['key'];  // get the parameter $key
  219.                 TTransaction::open('sigaweb'); // open a transaction
  220.                 $object = new OprCadastroGeral($key); // instantiates the Active Record
  221.                 $this->form->setData($object); // fill the form
  222.                 TTransaction::close(); // close the transaction
  223.             }
  224.             else
  225.             {
  226.                 $this->form->clear();
  227.                 $data = new StdClass;
  228.                 $data->tipo 'C';
  229.                 $data->situacao 'A';
  230.                 $data->pessoa 'F';
  231.                 $this->form->setData($data);
  232.             }
  233.         }
  234.         catch (Exception $e// in case of exception
  235.         {
  236.             new TMessage('error'$e->getMessage()); // shows the exception error message
  237.             TTransaction::rollback(); // undo all pending operations
  238.         }
  239.     }
  240. }
  241. ?>

GF

Olá Carlos Stclara.

Pelo que estou vendo, seu código era para estar funcionando. Quando fiz esse artigo usava uma das primeiras versões do Framework. Hoje não sei te dizer se o Adianti Framework ainda utiliza a função "entryMask" para produzir a máscara. Teria que ver isso.
CS

Então, amigo o entryMask foi trocado por tentry_mask.
Resolvido.

[]´s

Stclara.
JB

Como faço pra adicionar uma Classe Validator que criada externamente, no caso esta classe:
  1. <?php
  2.     class TUniqueValidator extends TFieldValidator
  3.     {
  4.         private $database;
  5.         private $model;
  6.         private $field;
  7.         private $value;
  8.         private $id;
  9.         
  10.         public function validate($label$value$parameters NULL)
  11.         {
  12.             $this->id    $parameters['id'];
  13.             $this->model $parameters['model']; 
  14.             $this->field $parameters['field'];
  15.             $this->value $value;
  16.             $this->database $parameters['database'];
  17.                     
  18.             if (!$this->checkUnique())
  19.             {
  20.                 throw new Exception("$label já cadastrado no banco de dados");
  21.             }
  22.         }
  23.         
  24.         private function checkUnique()
  25.         {
  26.             try
  27.             {
  28.                 TTransaction::open($this->database);
  29.                 $repository = new TRepository($this->model);
  30.                 
  31.                 $criteria = new TCriteria;
  32.                 $criteria->add(new TFilter($this->field'='$this->value));
  33.                 
  34.                 if (($this->id) && ($this->id <> '') && (!is_null($this->id)))
  35.                 {
  36.                     $criteria->add(new TFilter('id''<>'$this->id));
  37.                 }
  38.                 
  39.                 $count $repository->count($criteria);
  40.                 
  41.                 TTransaction::close();
  42.                 
  43.                 return ($count <= 0);
  44.             }
  45.             catch (Exception $e)
  46.             {
  47.                 new TMessage('error'$e->getMessage());
  48.                 TTransaction::rollback();
  49.             }
  50.         }
  51.     }
  52.     ?>

neste link: https://www.adianti.com.br/forum/pt/view_1103?tuniquevalidator
FF

Boa noite. Sou novato no framework e me surgiu uma dúvida.
Tenho um formulario de contatos do usuario na qual combo e entry são criados dinamicamente com add button.
Agora quero adicionar mascara ou alguma validaçao de acordo com o item do combo selecionado.
Alguém pode me ajudar?

Ex.:
Seleciono 'TELEFONE' >> Mascara (99) 9999-9999
Seleciono 'EMAIL' >> Valida Email
E assim por diante...
MA

Bom dia Guilherme!

Sei que ja faz mais de 3 anos da sua postagem, hehe, mas estou exatamente com este problema e não entendi muito bem a sua solução.
Fiz o seguinte, por enquanto:

Validadores:
  1. <?php
  2.   $cpf->addValidation('CPF', new TCPFValidator);
  3.         $cnpj->addValidation('CNPJ', new TCNPJValidator);
  4. ?>



Campos no Formulário:
  1. <?php
  2. $this->form->addFields( [$lcpf], [$cpf]);
  3.         $this->form->addFields( [$lcnpj], [$cnpj]);
  4. ?>



function change type

  1. <?php
  2. public static function onChangeType($param)
  3.     {
  4.         if ($param['tipo'] == 'F')
  5.         {
  6.             BootstrapFormBuilder::showField('formulario''cpf');
  7.             BootstrapFormBuilder::showField('formulario''nome');
  8.             BootstrapFormBuilder::showField('formulario''dt_nasc');
  9.             BootstrapFormBuilder::showField('formulario''sexo');
  10.             BootstrapFormBuilder::hideField('formulario''cnpj');
  11.             BootstrapFormBuilder::hideField('formulario''razaosocial');
  12.             BootstrapFormBuilder::hideField('formulario''inscest');
  13.         }
  14.         else
  15.         {
  16.             BootstrapFormBuilder::hideField('formulario''cpf');
  17.             BootstrapFormBuilder::hideField('formulario''nome');
  18.             BootstrapFormBuilder::hideField('formulario''dt_nasc');
  19.             BootstrapFormBuilder::hideField('formulario''sexo');
  20.             BootstrapFormBuilder::showField('formulario''cnpj');
  21.             BootstrapFormBuilder::showField('formulario''razaosocial');
  22.             BootstrapFormBuilder::showField('formulario''inscest');
  23.         }
  24.     }
  25. ?>



Mas na seguinte situação:
Cadastrei uma pessoa física.
o Tipo vai ser F, digito um CPF válido, ele passaria. Mas como o campo CNPJ esta escondido, nao foi preenchido e, desta forma, não é um CNPJ válido.
Podes me explicar a sua solução?

Grato!


ML

Marcos Rodrigo, boa noite!

Não sei se já resolveu sua situação, mas se te ajudar, eu uso da seguinte forma:

1 - Coloco apenas um campo pra CPF ou CNPJ, alterando a mascara via javascript;
2 - Coloco nesse campo um TRequiredValidator para que a label do campo fique vermelha (isso também pode ser feito via css);
3 - No evento onSave, faço a validação abaixo antes de instanciar o Active Record:

  1. <?php
  2. $this->form->validate(); // validate form data
  3.             
  4.             if($param['pes_tipo'] == 1
  5.             {
  6.                  $validator = new TCPFValidator;
  7.                  $validator->validate('CPF',$param['pes_cgc']);
  8.             }
  9.             
  10.             if($param['pes_tipo'] == 2)
  11.             {
  12.                  $validator = new TCNPJValidator;
  13.                  $validator->validate('CNPJ',$param['pes_cgc']);
  14.             }
  15. ?>


Pode ser adaptável à sua utilização.

Espero te ajudado!
LG

Eu verifico se é pessoa física ou jurídica tirando a máscara do CPF/CNPJ (se existir) e contando os caracteres, dai uso o TValida que peguei de um usuário do Fórum, só não lembro onde:
E faço +- isso:
  1. <?php
  2. $data $this->form->getData();
  3. $valida->setDados($data);
  4. $valida->addValidacao('Nome''nome', new TRequiredValidator);
  5. $valida->addValidacao('E-mail''email', new TEmailValidator);
  6. $data->cpfcgc Funcoes::limpaCPF_CNPJ($data->cpfcgc);
  7. if (strlen($data->cpfcgc) <= 11 && strlen($data->cpfcgc) > 0) {
  8.     $valida->addValidacao('CPF do Cliente''cpfcgc', new TCPFValidator);
  9. } else if (strlen($data->cpfcgc) > 11) {
  10.     $valida->addValidacao('CNPJ do Cliente''cpfcgc', new TCNPJValidator);
  11. }
  12. $valida->validate();
  13. ?>