Puede realizar la validación de los datos del formulario en CakePHP sin tener que crear un archivo model.php. Hay muchas ocasiones en las que tengo que hacer esto, y el almacenamiento de archivos modelo.php que no hacen nada más que la validación es un uso deficiente del patrón de diseño modelo.
Otro problema con CakePHP es que a veces las reglas de validación son comunes en varios modelos. Sería bueno mover la validación fuera del modelo, de la misma forma en que los comportamientos son para su propia subcarpeta. De esa forma podemos reutilizarlos o usarlos sin un modelo.
Otro problema con la validación es que depende del alias del modelo. Si tiene un modelo llamado "Correo electrónico" sin una tabla para realizar la validación, el formulario publicado también debe usar "Correo electrónico". Si el formulario usa un alias diferente del controlador, entonces debe establecer la acción. Una gran cantidad de pasos adicionales solo para hacer la validación. No puede volver a utilizar ese modelo nuevamente si su formulario utiliza un modelo diferente.
Así que aquí es mi enfoque alternativo.
En la acción de su controlador que recibe los datos del formulario publicado. Puede crear un modelo CakePHP predeterminado, agregar algunas reglas de validación y luego usar ese modelo para la validación.
Una acción de ejemplo podría verse así;
function edit()
{
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
if(!empty($this->data))
{
$model->validate = array(
'subject'=>array(
'rule'=>'notEmpty',
'required'=>true
),
'message'=>array(
'rule'=>'notEmpty',
'required'=>true
)
);
if($model->save($this->data))
{
// validation was successful, but no data was actually saved
}
}
}
La clave aquí es la creación de un modelo automático de CakePHP.
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
Lo anterior intenta encontrar un modelo por correo electrónico en la carpeta del modelo de aplicaciones. Cuando no se encuentre, CakePHP creará automáticamente un modelo en memoria para esa clase. Como hemos establecido el valor de 'table' en false, esto debería indicarle a CakePHP que este modelo no usa una tabla.
Esto funciona mientras no haya realmente un archivo email.php en la carpeta del modelo de aplicaciones. Una vez que este modelo se crea en la memoria. Se puede acceder desde la ayuda de Formularios integrada. Eso significa que los errores de validación se transmitirán correctamente a la vista.
Aquí hay un archivo de vista de ejemplo.
<?php echo $this->Form->create('Email',array('action'=>array('controller'=>'mycontroller','action'=>'edit'))); ?>
<?php echo $this->Form->input('subject'); ?>
<?php echo $this->Form->input('message',array('type'=>'textarea')); ?>
<?php echo $this->Form->submit(); ?>
La vista ahora representará los errores de validación del modelo de correo electrónico utilizando el Ayudante de formularios. Esto se debe a que el registro de clases de CakePHP ha guardado una copia del modelo automático de correo electrónico en la memoria a la que accederá el Ayudante de formularios.
Si desea utilizar reglas de validación personalizadas, deberá colocar los métodos de devolución de llamada en el archivo app_model.php.
Estos métodos ensayados en CakePHP 1.3
¿Por qué si (Validación :: correo electrónico ($ someThingThatMightBeAnEmailAddress)) que no trabaja en mi final? – PinoyStackOverflower
@PinoyStackOverflower Si al no funcionar te refieres a que no se encuentra Validación de 'Clase', entonces podrías necesitar agregar App :: uses ('Validation', 'Utility') para incluir la clase de Validación. –