Foros del Web » Programando para Internet » PHP » Zend »

Comparar Fechas en Zend

Estas en el tema de Comparar Fechas en Zend en el foro de Zend en Foros del Web. Hola amigos, Estoy haciendo un formulario para validar las fechas pero necesito comparar dos fechas en concreto... Creo que zend 2 no te da la ...
  #1 (permalink)  
Antiguo 18/05/2012, 05:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 79
Antigüedad: 13 años, 4 meses
Puntos: 3
Comparar Fechas en Zend

Hola amigos,

Estoy haciendo un formulario para validar las fechas pero necesito comparar dos fechas en concreto... Creo que zend 2 no te da la opcion por defecto o si?? ,

... Bueno, yo me he creado mi propio validador, pero claro, el validador donde lo tengo que poner porque me dice

Failed to locate validator "Validator_LessThanElement"

Este es el validador que encontre por Internet

Código PHP:
Ver original
  1. <?php
  2. namespace mvc\validator;
  3.  
  4. use Zend\Validator\AbstractValidator;
  5.  
  6.  
  7.  
  8. class Validator_LessThanElement extends AbstractValidator {
  9.   const MSG_LESSTHEN = 'msgLessThen';
  10.  
  11.   /**
  12.    * Definimos el mensaje de error con sus respectivas variables.
  13.    *
  14.    * @var array
  15.    */
  16.   protected $_messageTemplates = array(
  17.     self::MSG_LESSTHEN => "'%value%' no puede ser menor que '%token%'."
  18.   );
  19.    
  20.   /**
  21.    * Definimos las variables que se van a usar para construir el mensaje de
  22.    * error. El índice corresponde al nombre que se usara en el mensaje, y el
  23.    * valor a la variable que se utiliza en el código.
  24.    *
  25.    * @var array
  26.    */
  27.   protected $_messageVariables = array(
  28.     'token' => 'token'
  29.   );
  30.    
  31.   /**
  32.    * Variable tipo arreglo utilizado para contener todos los elementos que
  33.    * requieran ser analizados durante la validación, estas son las opciones
  34.    * que se pasan como tercer parámetros al método addValidator.
  35.    *
  36.    * @var array
  37.    */
  38.   protected $_options = array();
  39.    
  40.   /**
  41.    * Constructor sobre-escrito que recibe como parámetros las opciones
  42.    * adicionales cuando se pasan al método addValidator.
  43.    *
  44.    * @param array $options
  45.    */
  46.   public function __construct($options = null) {
  47.     $this->_options = $options;
  48.   }
  49.  
  50.   /**
  51.    * Método sobre-escrito que determina si un elemento es valido. Este método
  52.    * compara si un elemento es mayor que otro elemento.
  53.    *
  54.    * @param string $value
  55.    * @param array $context
  56.    * @return boolean
  57.    */
  58.   public function isValid($value, $context = null) {
  59.     $this->_setValue($value);
  60.  
  61.     foreach($this->_options as $option) {
  62.       if(isset($context[$option])) {
  63.         $this->token = $context[$option];
  64.                
  65.         if($value < $this->token) {
  66.           $this->_error(self::MSG_LESSTHEN);
  67.           return false;
  68.         }
  69.       }
  70.     }
  71.  
  72.     return true;
  73.   }
  74. }
  75. ?>

Alguna idea??... o sugerencia
  #2 (permalink)  
Antiguo 18/05/2012, 10:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Comparar Fechas en Zend

Pues el validador se ve "correcto", ¿como lo estas anexando a tu forma?
  #3 (permalink)  
Antiguo 19/05/2012, 09:05
 
Fecha de Ingreso: diciembre-2010
Mensajes: 79
Antigüedad: 13 años, 4 meses
Puntos: 3
Respuesta: Comparar Fechas en Zend

el codigo de arriba lo he metido en /library/Zend/validator, pues bien ahora creo un formulario tal que asi

Código PHP:
Ver original
  1. <?php
  2. namespace mvc\form;
  3.  
  4. use Zend\Form\Form,
  5. Zend\Form\Element;
  6.  
  7. use Zend\Validator\Date;
  8.  
  9.  
  10. class FormTwoDate extends Form {
  11.    
  12. public function init() {
  13.  
  14.    
  15.     $element = new Element\Text('date');
  16.     $element->setLabel('date')
  17.     ->setRequired(true)
  18.     ->addValidator('Date',false, array(
  19.             'messages'=>array(
  20.                     'dateInvalid'=>'Invalid type given.',
  21.                     'dateInvalidDate'=>'It does not appear to be a valid date',
  22.                     'dateFalseFormat'=>'It does not fit the date format dd/MM/yyyy')))
  23.                     ->addValidator('NotEmpty');
  24.    
  25.     $this->addElement($element);
  26.    
  27.     //identical le pasamos un array con el token a identificar en este caso el valor de la variable password
  28.     $element = new Element\Text('date2');
  29.     $element->setLabel('date2')
  30.     ->setRequired(true)
  31.     ->addFilter('StripTags')
  32.     ->addFilter('StringTrim')
  33.     ->addValidator('NotEmpty')
  34.     ->addValidator('Validator_LessThanElement',false, array(
  35.             'token' => 'date'));
  36.     $this->addElement($element);

y despues me pido que me valida el formulario en otro comando

Código PHP:
Ver original
  1. <?php
  2.  
  3.     namespace mvc\command\ncustomer;
  4.  
  5.  
  6.     use mvc\form\FormTwoDate;
  7.    
  8.    
  9.  
  10.            
  11.             $form=new FormTwoDate();
  12.            
  13.             $valido=$form->isValid(array('date'=>'2011-04-01', 'date2'=>'2011-03-01'));
  14.             var_dump($valido);

Y no me muestra nada
  #4 (permalink)  
Antiguo 21/05/2012, 05:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 79
Antigüedad: 13 años, 4 meses
Puntos: 3
Problema con Zend 2 Date Vadidator

Mas o menos creo que he conseguido solucionar el problema

No me carga el validador.

mi clase principal index.php tiene un autoloader

Código PHP:
Ver original
  1. require_once 'Zend2/library/Zend/Loader/StandardAutoloader.php';
  2. try{
  3.     $loader = new \Zend\Loader\StandardAutoloader();
  4.     $loader->registerNamespace('Zend', 'Zend2/library/Zend');
  5.     $loader->registerNamespace('mvc', 'mvc');
  6.     $loader->register();
  7. }catch(\Exception $e){
  8.     echo $e->getMessage();
  9. }

Entonces yo queria hacer crear un validador en la carpeta llamada mvc/validator que es donde tendre mis validadores propios para no tener que crearlos en la carpeta de Zend porque tampoco me funcionaba y no se por que, pero bueno este es otro asunto.

La cosa es que ahora en vez de hacer

Código PHP:
Ver original
  1. ->addValidator('Validator_LessThanElement',false, array(
  2.             'token' => 'date'));

hago

Código PHP:
Ver original
  1. ->addValidator(new Validator_LessThanElement(array('token'=>'date')));

Y me funciona pero no llego a comprender porque de esta forma
Código PHP:
Ver original
  1. ->addValidator('Validator_LessThanElement',false, array(
  2.             'token' => 'date'));

No me va supongo que Zend busca en la carpeta validador pero claro lo he definido en Zend/Validator/ Validator_LessThanElement y no me funcionaba.

Asi que medio he resuelto el problema. Pero me gustaria conocer si lo puedo hacer de la otra forma tambien. Supongo que es problema con las namespace que me coje los incorrecto, pero no tengo idea. Estuve trazando en la clase de Zend y no di con ello..

PD: Pido disculpas a los administradores de forosdelweb, quizas puse un tema que esta relacionado con este post, pero que a mi parecer es distinto porque hablaba del formato de las fechas que es totamente distinto con los validadores. o quizas me confundi yo al publicarlo.

Última edición por lolocripto; 22/05/2012 a las 01:54

Etiquetas: date, zend-form, zend-validate, zend_validate
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:22.