This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!
Somos grandes fanáticos de convención sobre configuración. Aun cuando toma un poco de tiempo aprender las convenciones de CakePHP, usted ahorrará tiempo en la marcha: siguiendo las convenciones, usted obtiene libre funcionalidad, y también se libera de la pesadilla del mantenimiento del seguimiento de los archivos de configuración. Las convenciones también hacen un sistema de desarrollo muy uniforme, permitiendo a otros desarrolladores ayudar más fácilmente.
Las convenciones de CakePHP han sido destiladas de años de experiencia de desarrollo web y mejores prácticas. Mientras que le sugerimos el uso de estas convenciones durante el desarrollo con CakePHP, deberíamos mencionar que muchos de estos postulados pueden ser anulados, esto es especialmente útil cuando se trabaja con sistemas heredados.
En general, los nombres de archivo llevan el símbolo underscore «_», mientras que los nombres de las clases usan CamelCase. La clase MyNiftyClass puede ser encontrada en el archivo my_nifty_class.php, por ejemplo.
Sin embargo, el nombre de la clase que contiene un archivo puede no necesariamente ser encontrada en el nombre de archivo. La clase EmailComponent es encontrada en un archivo llamado email.php, y la clase HtmlHelper es encontrada en un archivo llamado html.php.
Los nombres de las clases de modelos están en singular y en formato
CamelCase. Persona
, PersonaGrande
, y PersonaMuyGrande
son
todos ejemplos de nombres de modelos convencionales.
Los nombres de las tablas correspondientes a modelos de CakePHP están en
plural y usando guión bajo. Las tablas subyacentes para los modelos
arriba mencionados serían: personas
, personas_grandes
, y
personas_muy_grandes
respectivamente.
Puedes utilizar la librería de utilidades «Inflector» para verificar las palabras singulares/plurales. Consulta la documentación de Inflector para más información.
Los nombres de los campos con dos o más palabras se definen con guiones
bajos: nombre_y_apellidos
.
El nombre por defecto de las claves foráneas en relaciones hasMany,
belongsTo o hasOne, es el nombre de la tabla relacionada (en singular)
seguido de _id
. Así, si Panadero
hasMany Tarta
, la tabla
tartas
referenciará la tabla panaderos
mediante la clave foránea
panadero_id
. Para una tabla compuesta por varias palabras como
tipos_categorias
, la clave foránea sería tipo_categoria_id
.
El nombre de las tablas de unión entre modelos, usadas en relaciones
hasAndBelongToMany (HABTM), debería estar formado por el nombre de las
tablas que une puestos en orden alfabético (cebras_manzanas
en vez
de manzanas_cebras
).
Todas las tablas con las que interaccionan los modelos de CakePHP (con
excepción de las de unión de tablas) necesitan una clave primaria simple
que identifique inequívocamente cada fila. Si deseas modelar una tabla
que no tiene una clave primaria de un sólo campo, como por ejemplo las
filas de una tabla de unión posts_tags
, la convención de CakePHP
dicta que se añada una clave primaria de un solo campo a la tabla.
CakePHP no soporta claves primarias compuestas. Si deseas manipular directamente los datos de tu tabla de unión, usa llamadas directas a query o añade una clave primaria para que actue como un modelo normal. Por ejemplo:
CREATE TABLE posts_tags (
id INT(10) NOT NULL AUTO_INCREMENT,
post_id INT(10) NOT NULL,
tag_id INT(10) NOT NULL,
PRIMARY KEY(id)
);
En vez de utilizar una clave autoincremental como clave primaria, puedes utilizar char(36). De este modo CakePHP utilizará un uuid(String::uuid) único de 36 caracteres siempre que grabes un nuevo registro utilizando el método Model::save.
Los nombres de las clases de los controladores son en plural, con
formato CamelCased, y Terminan en Controller
. PersonasController
y UltimosArticulosController
son ejemplos de nombres convencionales
de controladores.
El primer método que escribas para un controlador debe de ser el método
index()
. Cuando la petición especifica un controlador pero no una
acción, el comportamiento por defecto de CakePHP es ejecutar el método
index()
de dicho controlador. Por ejemplo, una petición de
http://www.example.com/apples/ se corresponde con la llama al método
index()
del controlador ApplesController, mientras que
http://www.example.com/apples/view se corresponde con una llamada al
método view() del controlador ApplesController.
También puedes cambiar la visibilidad de los métodos de los controladores en CakePHP anteponiendo al nombre del método guiones bajos. Si un método de un controllador comienza por un guión bajo, el método no será accesible diretamente desde la web, sino que estará disponible sólo para uso interno. Por ejemplo:
<?php
class NoticiasController extends AppController {
function ultimas() {
$this->_buscaNuevosArticulos();
}
function _buscaNuevosArticulos() {
//Lógica para encontrar los nuevos articulos.
}
}
?>
Mientras que la página http://www.example.com/noticias/ultimas/ está accesible de manera normal, si alguien intenta acceder a la página http://www.example.com/noticias/_buscaNuevosArticulos/ obtendrá un error porque el nombre del método está precedido por un guión bajo.
Como se puede ver, los controladores con un nombre simple (de una sola
palabra) pueden ser fácilmente mapeados a una url en minúsculas. Por
ejemplo, ApplesController
(que se define en el archivo
“apples_controller.php”) y accedido desde http://example.com/apples.
Por otro lado múltiples combinaciones de palabras pueden ser transformadas automáticamente en un mismo nombre de controlador:
/redApples
/RedApples
/Red_apples
/red_apples
Todas resuelven la acción index de controlador RedApples. sin embargo,
la convención es que las urls sean en minúsculas y separadas con guión
bajo, por lo tanto /red_apples/go_pick es la forma correcta de acceder
a la acción. RedApplesController::go_pick
.
Para mas información sobre CakePHP URLs y sus parametros, ver Configuración de Rutas.
Los archivos de plantillas de Vistas (Views) deben ser nombradas después de las funciones de los controladores con guión bajo «_». La funcion getReady() del controlador PeopleController se visualizara con la plantilla de vista en /app/views/people/get_ready.ctp por ejemplo.
El patrón básico es: /app/views/controller/underscored_function_name.ctp
Al nombrar las piezas de su aplicación utilizando las convenciones de CakePHP, usted adquiere funcionalidad sin mucho mantenimiento de la configuración. Aquí encontramos un ejemplo final de las convenciones
Tabla de Base de Datos: ‘people’
Clase de Modelo: ‘Person’, encontrada en /app/models/person.php
Clase de Controlador: ‘PeopleController’, encontrada en /app/controllers/people_controller.php
Plantilla de Vista, encontrada en /app/views/people/index.ctp
Usando estas convenciones, CakePHP entiende que la peticion http://example.com/people/ apunta a la llamada de funcion index() en el controlador , PeopleController, donde el modelo Person esta disponible automaticamente (y apunta automaticamente a la tabla ‘people’ en la base de datos), y se renderiza en el archivo. Ninguna de estas relaciones han sido configuradas por otra razon que crear clases y archivos que usted necesita crear.
Ahora que usted ya se ha involucrado con los fundamentos de CakePHP, puede revisar el tutorial para realizar un Blog en CakePHP, que se encuentra al final de este manual.