La clase Inflector CakePHP está implementada para manipular una cadena determinada para realizar variaciones de palabras como singularización, pluralización, o camelización. La clase Inflector es estática y se puede acceder a ella desde el controlador, modelo o desde cualquier vista.
El problema que teneos con esta Clase es cuando hacemos uso de nombres en otro idioma que no sea el inglés (como puede ser el español) puesto que la clase está escrita para este idioma. Pero haciendo uso de las reglas (rules) de la Clase Inflector podemos modificar la forma en como se puede hacer la inflección de cualquier cadema en el idioma correspondiente a las relglas escritas.
Configurar las reglas de inflección.
Para hacer la personalización de estas reglas al idioma españos debemos buscar las siguientes lineas en el archivo: /app/Config/bootstrap.php:
Inflector::rules('singular', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
Inflector::rules('plural', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
El código anterior se encutra comentado apróximadamente en las lineas 58 y 59, personalmente yo uso las siguientes reglas en todos mis proyectos pero puedes añadirles más casos:
Inflector::rules('singular', array(
'rules' => array('/(.*)res$/i' => '\1r', '/(.*)nes$/i' => '\1n', '/(.*)des$/i' => '\1d', '/(.*)ses$/i' => '\1s', '/(.*)les$/i' => '\1l'),
'irregular' => array(),
'uninflected' => array('Tesis'),
)
);
Inflector::rules('plural', array(
'rules' => array('/(.*)r$/i' => '\1res', '/(.*)n$/i' => '\1nes', '/(.*)d$/i' => '\1des', '/(.*)s$/i' => '\1ses', '/(.*)l$/i' => '\1les'),
'irregular' => array(),
'uninflected' => array('Tesis'),
)
);
Estas reglas son válidas para cakephp1.3 y cakephp2.x
Pluralización
Con el método pluralize podemos pluralizar la cadena que se envíe como parámetro.
Inflector::pluralize($cadena_singular);
Entrada: Casa
Salida: Casas
Singularización
Con el método singularize podemos singularizar la cadena que se envíe como parámetro.
Inflector::singularize($cadena_plural);
Entrada: Casas
Salida: Casa
Camelización
Con el método camelize podemos eliminar los guiones bajos de una cadena y cambiar a mayuscula la primera leta de cada palabra.
Inflector::camelize($cadena_con_guion_bajo);
Entrada: casas_rojas
Salida: CasaRojas
Underscore
Con el método underscore podemos separar las palabras camelizadas usando los guiones bajos.
Inflector::underscore($cadena_camelizada);
Entrada: CasaRojas
Salida: casas_rojas
Humanización
Con el método humanize podemos tener el mismo efecto que la camelización con la diferencia de que las palabras quedan separadas por un espacio en vez de que queden juntas.
Inflector::humanize($cadena_con_guion_bajo);
Entrada: casas_rojas
Salida: Casa Rojas
Tableize
Con el método tableize podemos hacer lo mismo que con el método underscore con la diferencia de que hace también una pluralización de la cadena.
Inflector::tableize($cadena_camelizada);
Entrada: CasaRoja
Salida: casa_rojas
Classify
Con el método classify hacemos el efecto contrario que tableize, hace una camelización de la cadena y la singulariza.
Inflector::classify($cadena_con_guion_bajo);
Entrada: casa_rojas
Salida: CasaRoja