2011-04-06 22 views
8

Actualmente estoy trabajando en alguna validación adicional en un formulario en la devolución de llamada beforeValidate() del modelo.Modelo CakePHP-> invalidar no muestra error

Tengo el siguiente código:

function beforeValidate(){ 
    $i = 0; 
    foreach($this->data['CapitalCategory'] as $capital_category){ 
     if(!empty($capital_category['value'])){ 
      $this->invalidate('CapitalCategory.'.$i.'.points', 'error!'); 
       return false; 
      } 

     $i++; 
    } 
    return true; 
} 

I depurado todo, y lo hace return false si el valor está presente. ¡Pero luego, el formulario se vuelve a cargar y no se muestra ningún mensaje debajo de la entrada de puntos! Además, si depuro el validationErrors, la matriz contiene el error que debe mostrarse. ¿Cuál podría ser el problema?

¡Agradecemos cualquier ayuda!

EDITAR

Esta es la forma en que estoy construyendo mis entradas:

echo $this->Form->input('CapitalCategory.'.$i.'.value', array('label' => $category['Category']['name'], 'type' => 'text')); 
     echo $this->Form->input('CapitalCategory.'.$i.'.points', array('label' => 'Puncte', 'type' => 'text')); 

Creo que un problema podría ser el hecho de que estoy trabajando en CapitalModel en el que, además de algunos campos de la CapitalModel, he usado varios campos de su modelo relacionado, CapitalCategorieModel. ¿Podría ser este el problema de no vincular el error de validación al campo? Si es así, ¿cómo puedo resolverlo?

Respuesta

0

Probablemente esto se debe a que CakePHP no sabe dónde poner el mensaje de error

cuando llame $this->invalidate ($name);
$name debe coincidir con el nombre del campo (de entrada) que ha creado ..

Entonces, ¿puedes mostrarme cómo estás creando las entradas de formulario (campos)?

+0

He editado mi pregunta. Gracias. – linkyndy

+0

No he usado números en mis nombres de campo antes ... pero puede tratar de hacer que la segunda parte del nombre sea una cadena y no un número ... es decir, en lugar de ''CapitalCategory. '. $ I.'. Points ' ', ponga' 'CapitalCategory.F'. $ i. '. points'' .. reemplace en todo su código y avíseme qué sucede ... –

+1

Necesito ese número para decirle a Cake que guarde registros de relaciones' hasMany '. .. Cuando se guarda el capital, el modelo CapitalCategory guarda un registro para cada CapitalCategory. [Number] .field. – linkyndy

0

Asegúrese de no confundir model :: $ validationErrors y Controller :: $ validationError. Son diferentes y no comparten un vínculo mágico. Uno está poblado por métodos modelo, el otro poblado por métodos de controlador.

+0

Yo no soy. Por favor revisa mi edición, tal vez sea más útil. Gracias. – linkyndy

+0

pr ($ this -> [MODEL_NAME] -> validationErrors); ¿qué obtienes? – Rui

+0

Aparece el error correcto que debe mostrarse. – linkyndy

1

Bueno, es cierto que no sé por qué no se muestra para usted. Por lo que entiendo, debería estar haciendo la cosa mágica cakephp. Pero he tenido cosas como estas que ocurrieron cuando trato de validar y cakephp mostrando mágicamente el error. Lo resolví usando otra función de la clase FormHelper.

$this->Form->error('field'); 

y otra vez me reconozco por completo este no responde directamente a su pregunta, pero esto es al menos una forma de la torta de manejar lo que está pasando. Ah, y la función anterior devuelve nulo si no hay ningún error, así que puedes colocarlo donde quieras que aparezca el mensaje.

Aquí está el enlace del pastel a la función en la API si desea ver. FormHelper API 2.4