2009-09-26 11 views
6

Estoy creando un formulario de contacto para enviar un correo electrónico a una dirección especificada. Estoy tratando de utilizar las validaciones del modelo de CakePHP y como no necesito una tabla para el modelo de contacto, he configurado useTable como falso en el modelo de contacto. Sin embargo, recibo un error en la función del controlador que hace el envío. El error esCakePHP pidiendo una tabla modelo a pesar de useTable = false

Missing Database Table Error: Database table contacts for model Contact was not found.

apuntando a la línea que hace la primera llamada a $ this> Contacto:

$this->Contact->validates($this->data);

pensé que esto era bueno para ir con el marco de CakePHP. ¿Por qué estoy equivocado?

Respuesta

7

Editar: Ver this answer (y comment) para CakePHP 2.x (archivo de modelo debería llamarse Contact.php)


CakePHP 1.x - Comprobación de si el archivo de modelo se llama contact.php (minúsculas). Si no es así, CakePHP no encontrará su modelo y creará un "modelo automático" en tiempo de ejecución llamado Contact que utiliza la tabla contacts.

+1

wowsers. Lo revisé algunas veces, hasta que me di cuenta de que lo llamaba contact.ctp y no lo veía creando hábito. Me siento como un goober. – Adam

+0

jeje, todos hemos estado allí. uno que me dio bastante bien una vez fue 'actsAs' vs' actAs', horas perdidas. – deizel

2

Si falla la memoria, usted no está realmente establecer su modelo:

$this->Contact->set($this->data); 
$this->Contact->validates(); 

En su código, el modelo no es en realidad llenando a medida que intenta validarlo.

2

Si está utilizando un modelo sin una mesa también es necesario establecer un ejemplo de esquema

class Contact extends AppModel { 
    var $name = 'Contact'; 
    var $useTable = false; 
    var $_schema = array(
     'name' => array('type' => 'string', 'length' => 255), 
     'email' => array('type' => 'string', 'length' => 255), 
     'message' => array('type' => 'text') 
    ); 
} 
1

Si se ayuda a nadie, he encontrado que si tuviera

var $uses = 'ModelName'; 

en mi controlador, anulará useTable. Quítalo si no lo necesitas.

2

Dos cosas hicieron la diferencia para mí: cambiar el nombre de archivo de mi modelo a Contact.php (en lugar de ContactModel.php) y comentar var $uses = 'Contact'; en ContactController.php.

Además, muchos de los tutoriales disponibles para formularios de contacto son para versiones anteriores de CakePHP. Asegúrese de usar la estructura de entrada de formulario correcta. Aquí está la vista para el mío en Cake 2.1:

<?php 
    echo $this->Form->create('Contact'); 
    echo $this->Form->inputs(); 
    echo $this->Form->end('Send'); 

?> 
+0

aquí hay un 2.x, también: http://www.dereuromark.de/2011/12/15/tools-plugin-part-2-contact-form/ - usando un esquema – mark

+0

Muchas gracias por el Consejo sobre el cambio de nombre SomethingModel.php a Something.php. Tenía exactamente el mismo problema y estaba a punto de volverme loco buscando el origen de mi problema :-) – andzep

+0

Tuve el mismo problema, pero lo arreglé por accidente antes de leer esta solución. – MjrKusanagi

4

Este es un resultado superior a una búsqueda, pero la información está desactualizada, creo.

En CakePHP 2.0 + es necesario establecer $useTable = false; en el modelo, el nombre del modelo utiliza propercase (lo que debe ser Contact y no contact como se sugiere) y el controlador debe tener $uses = 'Contact'; o $uses = array('Contact'); o pastel genera por defecto del modelo e intenta para cargar una tabla que no existe Entonces, ambas cosas deben estar configuradas para que funcione.

+0

Al igual que en la respuesta @deizel, verifique que su archivo de modelo se llame Contact.php (mayúscula en CakePHP 2.x). Si no lo es, CakePHP no encontrará su modelo y sus definiciones de tablas únicas usando $ useTable. – zmonteca

Cuestiones relacionadas