Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipeduardo

Zend_Form e Zend_Validate

Recommended Posts

Olá,

 

existe algum tipo de validador ou metodo para requerer um campo somente se outro campo for preenchido

 

exemplo se data inicial preenchido a data final tambem é requirida...

 

e

 

tambem se tem como fazer comparação com outro campo tipo de data, seguindo o exemplo

 

que data inicial seja menor que final..

 

vou tentar explicar melhor...

 

1º ) Validador para forçar o preenchimento... somente se outro campo também for preenchido...

 

exemplo.: se data inicial != '' então data final é obrigatória, se data final != '' então data inicial é obrigatório

 

 

2º ) validador para datas não condição que data inicial não pode ser maior que final e data final não pode ser menor que data inicial...

essa eu fiz a validação por js, mas gostaria de validar no servidor também pelo zend, para que fique tudo bem padrão

 

ok?!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, acho que estas duas validações não tem suporte nativo no Zend. Acho que só se você criar um validador personalizado. Eu nunca fiz, então não vou conseguir te ajudar neste sentido, mas sei que é possível. Veja o manual que pode te ajudar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, acho que estas duas validações não tem suporte nativo no Zend. Acho que só se você criar um validador personalizado. Eu nunca fiz, então não vou conseguir te ajudar neste sentido, mas sei que é possível. Veja o manual que pode te ajudar.

 

Carlos Eduardo

 

to nesse caminho carlos, mas to encontrando um problema...

 

meu validador...

 

<?php 

require_once 'Zend/Validate/Abstract.php'; 

class Zend_Validate_RequireCondition extends Zend_Validate_Abstract 
{
   const NOT_MATCH = 'requireNotMatch'; 

   protected $_messageTemplates = array( 
       self::NOT_MATCH => "Value is required and can't be empty" 
   ); 

   protected $fieldToMatch = ''; 

   public function __construct($fieldToMatch) 
   { 
   	$this->fieldToMatch = (string) $fieldToMatch; 
   } 

   public function isValid($value, $context = null) 
   { 
   	$valueString = (string) $value;

   	$this->_setValue($valueString); 

   	if ($context[$this->fieldToMatch] != '' && $valueString == '') 
   	{ 
   		$this->_error(self::NOT_MATCH); 

   		return false; 

   	} 

   	return true; 
   } 
} 

 

no form...

 

/** 
        * Validador de data 
        */
      	$validacaoData = new Zend_Validate_Date('DD/MM/YYYY');
      	$validacaoData->setMessages(array( // error messages
           Zend_Validate_Date::INVALID_DATE => 'A data \'%value%\' não é válida.',
      		Zend_Validate_Date::FALSEFORMAT => 'O formato de data \'%value%\' não é válido.'
       ));

       $validacaoDataInicial = new Zend_Validate_RequireCondition('dta_fin_especial');
       $validacaoDataFinal = new Zend_Validate_RequireCondition('dta_ini_especial');

	/* Data Inicial Especial Produto */
      	$data_ini_especial = $this->createElement('text', 'dta_ini_especial');      	
      	$data_ini_especial->setLabel('Data Inicial Preço Especial:')
      		  			  ->setDescription('dd/mm/yyyy')
      		  			  ->setAttrib('maxlength', 10)
      		  			  ->setAttrib('alt', 'date')
      		  			  ->addFilter('StripTags')
      		  			  ->addFilter('StringTrim')
      		  			  ->addValidator($validacaoData)
      		  			  ->addValidator($validacaoDataInicial)
      		  			  ->addValidator('NotEmpty')
      		  			  ->setDecorators(array('ViewHelper', 'Description', 'Errors',
      		  			  array('HtmlTag', array('tag' => 'dd')),
      		  			  array('Label', array('tag' => 'dt')),
      		  			  array('Description', array('escape' => false, 'tag' => 'label')),
      		  			  ));

	/* Data Final Especial Produto */
      	$data_fin_especial = $this->createElement('text', 'dta_fin_especial');      	
      	$data_fin_especial->setLabel('Data Final Preço Especial:')
      		  			  ->setDescription('dd/mm/yyyy')
      		  			  ->setAttrib('maxlength', 10)
      		  			  ->setAttrib('alt', 'date')
      		  			  ->addFilter('StripTags')
      		  			  ->addFilter('StringTrim')
      		  			  ->addValidator($validacaoData)
      		  			  ->addValidator($validacaoDataFinal)
      		  			  ->addValidator('NotEmpty')
      		  			  ->setDecorators(array('ViewHelper', 'Description', 'Errors',
      		  			  array('HtmlTag', array('tag' => 'dd')),
      		  			  array('Label', array('tag' => 'dt')),
      		  			  array('Description', array('escape' => false, 'tag' => 'label')),
      		  			  ));

 

mas o resulta não esta sendo o esperado...

 

acima o método para forçar o preenchimento caso

um campo seja preenchido ou vice e versa mas que não funciona, ainda!

 

e para meu segundo problema acho que posso usar o compare

do Zend_Date só não sei como colocar isso dentro da validação do formulário e se é possível fazer isso, será que é?!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.