3 de marzo de 2009. ¡Hola mundo!

Hola visitante, ¿cómo va todo? Ahora mismo estoy ocupado en otros frentes y durante este tiempo no he escrito más experiencias Cake :-(, aunque he dedicado algún tiempecito, eso sí, a traducir algunos espacios de http://book.cakephp.org/ al español. Bueno, visitante, ¡espero volver a verte pronto por aquí! 🙂

7. Servicios Web en Internet y algo más sobre REST

Google nos explica en qué consiste la tecnología REST:

Otras explicaciones muy buenas sobre este tema: una es es de Nokrosis y el enlace es este; también adjunto este artículo, Servicios Web con PHP, de www.malditainternet.com.

24 de diciembre de 2008. Amaya y www.mclibre.org

Estos días, a raíz de un mensaje publicado en el grupo Google CakePHP en español, he consultado varios recursos que tratan los temas de la accesibilidad y la usabilidad Web y he tomado algunas notas. Hasta hace poco he trabajado manualmente con mis vistas CakePHP, pero ahora voy a probar con el programa Amaya 11, del W3C (World Wide Web Consortium).

No he hecho muchas pruebas, pero tengo la sensación de que se trata de un acierto y proporciona un marco estupendo para el seguimiento de las recomendaciones del W3C. Además, he descubierto www.mclibre.org y este recurso excelente que explica cómo empezar con Amaya.

¿Conoces este programa? Si es así, ¡deja aquí algún comentario! ¿Qué tal es? Yo voy a empezar a seguir el curso de páginas web con Amaya; promete, y seguro que mis vistas CakePHP se hacen más usables y accesibles.

5 de diciembre de 2008. ¡Buen fin de semana!

Estimado visitante número n,

Ten un buen fin de semana y no seas discreto.

Conjunto de Mandelbrot barroco de http://www.intellectualism.org/. La villageoise, de Jean-Philippe Rameau, por Trevor Pinnock.

24 de noviembre de 2008. De CakePHP 1.1 a CakePHP 1.2. El baile de los errores. Parte IV

4. Cambios en la validación de los datos

La validación de datos de CakePHP 1.2 es más poderosa que la de CakePHP 1.1. Ahora hay muchas más posibilidades, aunque también se pueden seguir usando las constantes de validación VALID_NOT_EMPTY, VALID_EMAIL, VALID_NUMBER y VALID_YEAR de CakePHP 1.1. En este post de Hospedaxes explican cómo definir reglas de validación en CakePHP 1.2. 

Mi modelo Categoria de CakePHP 1.1, que utilizaba la constante de validación VALID_NOT_EMPTY, era así:


class Categoria extends AppModel{

   var $name = 'Categoria';

   var $displayField = 'nombre';

   var $validate = array(  'nombre'=>VALID_NOT_EMPTY,
                           );

   var $hasMany = array('Empresa'=>array('className'=>'Empresa'));

}

Y en CakePHP 1.2 quedo así:


class Categoria extends AppModel{

   var $name = 'Categoria';

   var $displayField = 'nombre';

   var $validate = array(

                           'nombre' => array(

                                                'rule' => array('minLength', 1),

                                                'message' => 'El nombre es obligatorio'

                                             )

                     );

    var $hasMany = array('Empresa'=>array('className'=>'Empresa'));

}

Por otra parte, el uso del método validates de la clase Model, que comprueba si los campos de un registro satisfacen las reglas de validación que se definen en el modelo, también ha cambiado. Esto lo explican aquí

Por lo tanto, el método introducir_datos de mi controlador EmpresasController de CakePHP 1.1, que utilizaba el método validates, y era así:


if ($this->Empresa->validates($this->data)){

queda finalmente así en CakePHP 1.2:


$this->Empresa->set($this->data);         

if ($this->Empresa->validates()){

21 de noviembre de 2008. De CakePHP 1.1 a CakePHP 1.2. El baile de los errores. Parte III

¿Sigues bailando conmigo? ¿Sí? Está bien, pues entonces dale al play y continúa -ponte unos auriculares, si es necesario-.

No te dejes engañar por lo extenso de este post, dividido en varias partes; me estoy manejando con los errores mejor de lo que esperaba y creo que este ejercicio es estupendo para ver las diferencias que hay entre las dos versiones.

3. Funciones que ya no se utilizan

Hay que cambiar las funciones de CakePHP 1.1 que ya no usa CakePHP 1.2. Por ejemplo, generateList por find.

En el programa que escribí en CakePHP 1.1 tenía la vista /empresas/editar.thtml, para editar las empresas y para que el usuario pudiera hacer cambios en los registros. En esta vista el usuario seleccionaba el nombre de la categoría de una empresa -y no su identificador- en una lista desplegable.

Como una empresa pertenece a una categoría y una categoría tiene muchas empresas, la acción editar() del controlador EmpresasController tenía la siguiente instrucción para poblar la variable $categoriaArray de la vista /empresas/editar.thtml


$this->set('categoriaArray',$this->Empresa->Categoria->generateList(''));

La clase Model de CakePHP 1.2 no implementa el método generateList y en esta versión hay que utilizar find para poblar la variable $categoriaArray de la vista /empresas/editar.ctp, como explican aquí.

Por lo tanto, la instrucción PHP del método editar() del controlador EmpresasController tiene que quedar así:


$this->set('categoriaArray',$this->Empresa->Categoria->find('list'));

20 de noviembre de 2008. De CakePHP 1.1 a CakePHP 1.2. El baile de los errores. Parte II

Sigue el baile de los errores, y también los cambios que estoy haciendo para que el programa escrito para CakePHP 1.1 funcione en CakePHP 1.2.

2. Cambios en la autenticación

Esta parte me ha llevado tiempo porque no estoy familiarizado con Auth, el nuevo componente que incorpora CakePHP 1.2 para gestionar la autenticación de los usuarios. En el controlador UsuariosController he hecho lo siguiente:

1. He cargado el controlador.


var $components = array('Auth');

2. He configurado el componente Auth en el método beforeFilter() del controlador.


   function beforeFilter(){

         /* Auth supone que hay un model User; nosotros le decimos que nuestro modelo es Usuario*/

         $this->Auth->userModel = 'Usuario';

         /* Auth supone que hay un modelo User con los campos username y password. La siguiente línea
            especifica qué campos de la tabla usuarios se utilizan como username y password. */

         $this->Auth->fields = array('username' => 'login', 'password' => 'password');

         /* Esta línea define la acción/vista correspondiente al login. Si un usuario no está
            autorizado a ver una página es redireccionado/a a esta acción/vista. */

         $this->Auth->loginAction = array('controller' => 'usuarios', 'action' => 'login');

         /* Por defecto, el componente de autenticación bloquea todas las acciones. La siguiente
            línea le dice al componente Auth qué acciones no necesitan autenticación.
            Sin esta línea, no podríamos ejecutar la acción login ni visualizar,
            por lo tanto, su vista asociada, login.ctp*/

         $this->Auth->allow('login');

         /* Decimos al comonente Auth donde tiene que redireccionar al usuario después de una
            autenticación exitosa.*/

         $this->Auth->loginRedirect = array('controller' => 'usuarios', 'action' => 'index');

         /* Especificamos el mensaje de error que aparece en la pantalla si la autenticación falla. */

         $this->Auth->loginError = 'El nombre de usuario o la contraseña no son correctos. Por favor, inténtalo otra vez.';

      }

Gracias a este enlace entendí para qué sirve cada uno de los atributos de la clase AuthComponent, y cómo se utilizan.

3. He implementado el método login(), dejándolo vacío. Finalmente, se tiene que crear la vista login.ctp -que yo escribí en el baile de los errores Parte I-.