martes, noviembre 20, 2007

Tip: Cambiando CakePHP para la flexión de palabras irregulares.

En esta ocasión veremos una sencilla forma de realizar una flexión gramatical dentro de CakePHP para lograr que nuestra estructura mantenga una correcta descripción de los elementos de nuestras entidades dentro de una aplicación.

CakePHP es un marco de desarrollo para aplicaciones de creación ágiles, basado en los patrones de MVC (Modelos, Vistas y Controles). CakePHP toma el esquema de una base de datos y crea los objetos MVC, con lo cual se tiene de manera muy sencilla una aplicación, que cierto no cumple con todos los requerimiento de la aplicación, por otra parte desahoga la manipulación sencilla y directa de la base de datos.

Para esto es muy importante considerar ciertas recomendaciones gramaticales al momento de generar nuestro esquema de base de datos:

  1. La tabla es un conjunto de registros, por lo cual si estamos guardando direcciones, la tabla deberá llamarse asi: "direcciones"
  2. La llave primaria debiera ser entonces llamada de forma singular y con un sufijo de "_id", para el caso: "direccion_id"
  3. El primer campo deberá ser "direccion" y a continuacion los campo restantes.
  4. Si queremos incluir una llave primaria externa, entonces deberemos llamarla con el sufijo "_id", para nuestro caso "provincias_id".

¿Qué pasa cuando tratamos de crear nuestro MVC?

CakePHP como varios marcos de desarrollo, basan la creación en lo anterior mencionado, y uno de los problemas es singularizar las palabras irregulares, para nuestro caso esto se puede ilustrar:

  • Modelo: direccione.php
  • Controlador: direcciones_controller.php
  • Vista: direccione.html

Por omision CakePHP considera las "s" como el plural de nuestro campo. Para nuestro ejemplo, el problema reside en el uso de "direccione", el cual no corresponde a una ortografía correcta. Una alternativa para solucionar esto es colocar "direccions" en lugar de "direcciones", pero esto de ninguna manera se ve atractivo. Y provoca problemas secundarios en el manejo de las aplicaciones.

La respuesta se encuentra en el archivo de configuración de "inflections.php", en él se pueden realizar diferentes modificaciones, que permitirán colocar un par de palabras para estos casos:

 *  $irregularPlural = array('atlas' => 'atlases', 'beef' => 'beefs', 'brother' => 'brothers')
 
$irregularPlural = array('direccion' => 'direcciones', 'pais' => 'paises');



Al volver a crear nuestro MVC con CakePHP, la estructura quedara:



  • Modelo: direccion.php

  • Controlador: direcciones_controller.php

  • Vista: direccion.html

Listo!

2 comentarios:

Primavera Lopez dijo...

Recien comienzo a probar cake y me encontré con estas convenciones ciertamente útiles, pero que no son obvias de precisar en nuestro idioma, aunque en el archivo de configuraciones inflections.php bien se pueden adaptar como has explicado.
Por demás muy bueno tu post, aclara bastante.
saludos!
:)

Anónimo dijo...

Hola como va, en el blog de José Lorenzo se explica como crear las inflexiones para una gran parte de la gramatica española:

$pluralRules = array('/([r|d|j|n|l|m|y|z])$/i' => '\1es','/a$/i' => '\1as');

$uninflectedPlural = array();

$irregularPlural = array();

$singularRules = array('/([r|d|j|n|l|m|y|z])es$/i' => '\1', '/as$/i' => 'a', '/([ti])a$/i' => '\1a');

$uninflectedSingular =
$uninflectedPlural;

$irregularSingular = array_flip($irregularPlural);


-----------------------------
Las palabras irregulares deberian aplicarse las que no cumplen con la regla gramatical

por ejemplo la palabra mani, que en plural seria manies