lunes, 22 de julio de 2013

Dos idiomas en una misma vista

¿Podemos usar dos idiomas en la misma vista con las funciones de internacionalización de CakePHP?

Pues se puede, aunque no es un método del todo limpio.

Se trata de escribir la variable de sesión 'Config.language' con el idioma que queramos usar. Por ejemplo:

$_SESSION['Config']['language'] = 'spa';

En principio, se podría recuperar el que esté actualmente en uso, leyendo la variable de sesión, y guardarlo temporalmente para restaurarlo al terminar de usar el otro.

jueves, 6 de junio de 2013

Excepciones (actualizado)

Artículos para empezar con el tema de las Excepciones:

Buenas prácticas con Excepciones en PHP 5. Texto de Ralph Schlinder sobre el uso de las Excepciones anidadas y el de las Excepciones de la SPL para lograr la mayor expresividad y control.

Usando excepciones para simplificar la lógica de los controladores Texto de Mark Story sobre el uso de las excepciones en los Modelos y cómo puede ayudar a escribir controladores más simples.

Throwing exceptions Un artículo de J. Gauffin sobre cuando un método debería lanzar excepciones y cuándo devolver null o false. Pista: si esperas un resultado y no se produce, lanza una excepción (por ejemplo, Model->read()), Por el contrario, si un resultado posible es que no haya resultados, devuelve false o null (por ejemplo, Model->find()).


miércoles, 27 de febrero de 2013

Algunas notas para tener en cuenta en Test Unitarios

Evitar errores definiendo Fixtures con algunos tipos de campos

Por alguna razón que ignoro, al definir los campos (var $fields) en fixtures con los tipos text, date o datetime (sospecho que también binary) es mejor no usar el array completo para definir todos los parámetros, sino únicamente poner el tipo de campo. De otro modo, CakePHP se empeña en crear una definición de tabla SQL que no es válida y el test falla. Al dejar que lo haga de manera automática va perfecto.

Por ejemplo:

var $fields = array(
    'content' => 'text',
    'created' => 'date'
);

Tests y localización

Añade la instrucción

Configure::write('Config.language', 'eng');

al principio del test para evitar que CakePHP localice las cadenas de texto con __() y similares. De este modo, si un resultado del test depende de una cadena localizada no la traducirá (asumiendo que uses eng como idioma por defecto, claro).