This document is for CakePHP's development version, which can be significantly different
from previous releases.
You may want to read
current stable release documentation instead.
Somos muy fans de la convención por encima de la configuración. A pesar de que toma algo de tiempo aprender las convenciones de CakePHP, ahorrarás tiempo a la larga. Siguiendo las convenciones obtendrás funcionalidades gratuitas y te liberarás de la pesadilla de mantener archivos de configuración. Las convenciones también hacen que el desarrollo sea uniforme, permitiendo a otros desarrolladores intervenir y ayudar facilmente.
Los nombres de las clases Controlador son en plurar, en formato CamelCase
,
y finalizan con Controller
. Ejemplos de nombres son: UsuariosController
y CategoriasArticulosController
.
Los métodos publicos de los Controladores a menudo se exponen como “acciones”
accesibles a través de un navegador web. Por ejemplo, /users/view
mapea
al método view()
de UsersController
sin tener que hacer nada en el
enrutamiento de la aplicación. Los métodos protegidos o privados no son
accesibles con el enrutamiento.
Como acabas de ver, los controladores de una sola palabra mapean a una dirección
URL en minúscula. Por ejemplo: a UsuariosController
(que debería estar
definido en UsuariosController.php) se puede acceder desde
http://example.com/usuarios.
Aunque puedes enrutar controladores de múltiples palabaras de la forma que
desees, la convención es que tus URLs separen las palabras con guiones utilizando
la clase DashedRoute
, de este modo /categorias-articulos/ver-todas
es
la forma correcta para acceder a la acción CategoriasArticulosController::verTodas()
.
Cuando creas enlaces utilizando this->Html->link()
puedes utilizar las
siguientes convenciones para el array url:
$this->Html->link('titulo-enlace', [
'prefix' => 'MiPrefijo' // CamelCase
'plugin' => 'MiPlugin', // CamelCase
'controller' => 'NombreControlador', // CamelCase
'action' => 'nombreAccion' // camelBack
]
Para más información sobre URLs de CakePHP y el manejo de sus parámetros puedes consultar Connecting Routes.
En general los nombres de los archivos coinciden con los nombres de las clases y siguen los estándares PSR-0 o PSR-4 para cargarse automáticamente. Los siguientes son ejemplos de nombres de clases y de sus archivos:
La clase Controlador LatestArticlesController
debería estar en un archivo llamado LatestArticlesController.php
La clase Componente MyHandyComponent
debería estar en un archivo llamado MyHandyComponent.php
La clase Tabla OptionValuesTable
debería estar en un archivo llamado OptionValuesTable.php.
La clase Entidad OptionValue
debería estar en un archivo llamado OptionValue.php.
La clase Behavior EspeciallyFunkableBehavior
debería estar en un archivo llamado EspeciallyFunkableBehavior.php
La clase Vista SuperSimpleView
debería estar en un archivo llamado SuperSimpleView.php
La clase Helper BestEverHelper
debería estar en un archivo llamado BestEverHelper.php
Cada archivo deberá estar ubicado en la carpeta/namespace correcta dentro de tu carpeta de tu aplicación.
Los nombres de las clases table
son en plural, CamelCase
y terminan en
Table
. Algunos ejemplos de convención de nombres son: UsersTable
,
ArticleCategoriesTable
y UserFavoritePagesTable
.
Los nombres de las tablas correspondientes a los modelos de CakePHP son en plural
y con “_”. Los nombres de las tablas para los modelos arriba mencionados serían
users
, article_categories
y user_favorite_pages
respectivamente.
La convención es utilizar palabras en inglés para los nombres de las tablas y de
las columnas. Si utilizas otro idioma CakePHP puede que no sea capaz de procesar
correctamente las conversiones (de singular a plural y viceversa). Si necesitas
añadir reglas para tu idioma para algunas palabras, puedes utilizar la clase
Cake\Utility\Inflector
. Además de definir tus reglas de
conversión personalizadas, esta clase te permite comprobar que CakePHP comprenda
tu sintaxis personalizada para palabras en plural y singular. Mira la documentación
sobre Inflector para más información.
Los nombres de campos con dos o más palabras se escriben con “_”, por ejemplo: first_name
.
Las claves foráneas en relaciones 1-n
(hasMany
) y 1-1
(belongsTo/hasOne
)
son reconocidas por defecto mediante el nombre (en singular) de la tabla relacionada
seguido de _id
. De este modo si Users
tiene varios Articles
(relación
hasMany
), la tabla articles
se relacionará con la tabla users
a través
de la clave foránea user_id
. Para una tabla como article_categories
cuyo nombre está formado por varias palabras, la clave foránea sería article_category_id
.
Las tablas de unión, usadas en las relaciones n-n
(BelongsToMany
) entre
modelos, deberían ser nombradas después de las tablas que unirán y en orden
alfabético (articles_tags
en lugar de tags_articles
).
Además de utilizar claves auto-incrementales como claves primarias, también
puedes utilizar columnas UUID. CakePHP creará un único UUID de 36 caracteres
(Cake\Utility\Text::uuid()
) cada vez que guardes un nuevo registro
usando el método Table::save()
.
Los archivos de las plantillas de vistas son nombrados según las
funciones de controlador que las muestran empleando “_”. La función viewAll()
de la clase ArticlesController
mostrará la vista templates/Articles/view_all.php.
El patrón base es templates/Controller/nombre_funcion.php.
Nombrando los elementos de tu aplicación empleando las convenciones de CakePHP ganarás funcionalidad sin los fastidios y ataduras de mantenimiento de la configuración.
Un último ejemplo que enlaza todas las convenciones:
Tabla de base de datos: «articles»
Clase Tabla: ArticlesTable
, ubicada en src/Model/Table/ArticlesTable.php
Clase Entidad: Article
, ubicada en src/Model/Entity/Article.php
Clase Controlador: ArticlesController
, ubicada en
src/Controller/ArticlesController.php
Plantilla vista, ubicada en templates/Articles/index.php
Usando estas convenciones CakePHP redirige una petición a http://example.com/articles/
a una llamada a la función index()
de la clase ArticlesController,
donde el modelo Article
está disponible automáticamente (y enlazada, automáticamente
también, a la tabla articles
en la base de datos) y renderiza un
archivo. Ninguna de estas relaciones han sido configuradas de ningún modo salvo
creando clases y archivos que has tenido que crear de todas formas.
Ahora que te has introducido en los fundamentos de CakePHP. puedes tratar de realizar el tutorial Tutorial Bookmarker (Favoritos) para ver como las cosas encajan juntas.