jueves, 22 de mayo de 2014

Es muy común que cuando dasarrollamos una aplicación web necesitemos enviar email a los usarios con notificaciones, avisos, etc... Por eso CakePHP tiene toda una clase dedicada a este fin CakeEmail.

En este post vamos a configurar esta clase para que funcione con una cuenta gmail. Empezamos con la configuración para Gmail.

Configurar una cuenta Gmail en CakePHP para enviar email.


Cuando estamos desarrollando una aplicación en nuestro servidor local es muy común que no tengamos configurado un servidor de correo o que no dispongamos de una cuenta de correo en un servidor Smtp es por eso que es muy útil poder configurar CakePHP para enviar correo desde Gmail.

1. Añadir los datos de configuración en app/Config/email.php

Abrimos nuestro fichero de configuración de email que esta ubicado en /miproyecto/app/Config/email.php y añadimos la siguientes lineas:

public $gmail = array(
     'transport' => 'Smtp',
     'from' => array('site@caketest.lo' => 'CakeTest'),
     'host' => 'ssl://smtp.gmail.com',
     'port' => 465,
     'username' => 'usuario@gmail.com',
     'password' => 'passwordgmail'      
);

En este fichero existen otras configuraciones, CakePHP usa por defecto la "default" asi que también podriamos escribir la configuración en esta variable, eso ya es elección vuestra.
Ahora para enviar un email simplemente tendriamos que insertar el siguiente código en la acción de un controlador:
$Email = new CakeEmail();
$Email->config('gmail');
$Email->to('emaildonde@queremoseviar.com');
$Email->subject('Asunto del email');
$Email->send('Texto del mensaje');

Si quereis saber acerca de esta clase, como puede ser el tema de templates, layout, pasar variables... revisar en documentación ofical de CakePHP la clase CakeEmail.

miércoles, 21 de mayo de 2014

En este post vamos a configurar el Plugin Users de la gente de CakeDC en una aplicación desarrollada con CakePHP 2.x. Vamos a empezar.


¿Que es el Plugin Users?

Es un plugin para CakePHP desarrollado por la gente de CakeDC para el registro, login, logout y más de usuarios. Este plugin por si mismo es capaz de:


  • Registro de usuarios (Habilitado por defecto)
  • Verificación de registro por token enviado vía email
  • Login de usuarios (email/password)
  • Reseteo de password basado en token vía email e ingresando nuevo password
  • Perfil de usuario simple
  • Búsqueda de usuarios (requiere CakeDC Search Plugin)
  • Gestión de usuarios usando la seccion "admin" (add/edit/delete)
  • Gestión de Roles simple

Por defecto para el reseteo de password se requiere que el usuario ingrese su dirección de email, se le envía un mail con un link y token. Cuando accede a la URL con el token el usuario podrá ingresar un nuevo password.


Comenzamos

Nota: Vamos a suponer que ya tenemos instalado CakePHP 2.x en nuestro servidor con la base de datos configurada, para este tutorial hemos usado la version 2.5.1. Si todavia no lo teneis instalado podeis instalarlo desde aqui siguiendo los pasos desde la documentación oficial de CakePHP.
El plugin CakeDC Users requiere PHP5.2+, CakePHP 2.x, plugin CakeDC Search y plugin CakeDC Utils.


1. Instalamos el Plugin Users

Para instalar el plugin solo teneis que descargarlo desde Github y descomprimirlo en una carpeta llamada Users en la siguiente ruta de vuestra aplicación /project_name/app/Plugin/Users, aquí os dejo el enlace


O de forma alternativa si usais Git podeis teclear el siguiente comando:

git submodule add git@github.com:CakeDC/Users app/Plugin/Users

Para que este plugin fucione es necesario instalar otro dos plugin de la gente de CakeDC. Estos son el plugin Search y el plugin Utils seguiremos el mismo procedimiento, los descargamos y los descomprimimos en las siguientes rutas respectivamente /project_name/app/Plugin/Search y /project_name/app/Plugin/Utils

Si preferis hacerlo con git tecleamos los siguientes comandos.

Para el plugin Search git submodule add git@github.com:CakeDC/Search app/Plugin/Search

Para el plugin Utils git submodule add git@github.com:CakeDC/Utils app/Plugin/Utils


2. Crando las tablas en la Base de Datos

Esto los podemos hacer de dos formas, desde la consola de CakePHP o simplemete utilizando phpMyAdmin y ejecunatdo la siguiente secuencia SQL CREATE TABLE IF NOT EXISTS `users` (
  `id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `username` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `password` varchar(128) COLLATE utf8_spanish_ci DEFAULT NULL,
  `password_token` varchar(128) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email_verified` tinyint(1) DEFAULT '0',
  `email_token` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `email_token_expires` datetime DEFAULT NULL,
  `tos` tinyint(1) DEFAULT '0',
  `active` tinyint(1) DEFAULT '0',
  `last_login` datetime DEFAULT NULL,
  `last_action` datetime DEFAULT NULL,
  `is_admin` tinyint(1) DEFAULT '0',
  `role` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `BY_USERNAME` (`username`),
  KEY `BY_EMAIL` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

CREATE TABLE IF NOT EXISTS `user_details` (
  `id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `user_id` varchar(36) COLLATE utf8_spanish_ci NOT NULL,
  `position` float NOT NULL DEFAULT '1',
  `field` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `value` text COLLATE utf8_spanish_ci,
  `input` varchar(16) COLLATE utf8_spanish_ci NOT NULL,
  `data_type` varchar(16) COLLATE utf8_spanish_ci NOT NULL,
  `label` varchar(128) COLLATE utf8_spanish_ci NOT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQUE_PROFILE_PROPERTY` (`field`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Si decidimos hacerlo con la consola tenemos que teclear el siguiente comando: ./Console/cake schema create users --plugin Users


3. Cargando el Plugin Users y las Rutas

Ahora tenemos que cargar nuestro Plugin Users junto con los Plugin Utils y Search en nuestro CakePHP, para ello abrimos nuestro fichero boottstrap.php ubicado en /project_name/app/Config/bootstrap.php y añadimos las siguientes lineas de codigo: CakePlugin::load('Users' array('routes' => true));
CakePlugin::load('Search');
CakePlugin::load('Utils');

Cuando indicamos en la carga del plugin Users array('routes' => true) lo que estamos haciendo es cargar las rutas definidas para el plugin para tener las pretty URL, es decir, http://localhost/project_name/users/login y no http://localhost/project_name/users/users/login


4. Accediendo a las acciones del Plugin

Una vez que tenemos todo configurado podemos acceder a las acciones de la siguiente manera:

  • Login http://localhost/project_name/users/login o http://localhost/project_name/login
  • Registro http://localhost/project_name/register o http://localhost/project_name/users/add

Esta seria la configuración básica del Plugin Users. Ahora vamos a ver como configurar algunas opciones más del plugin y como personalizarlo y adaptarlo a nuestras necesidades.


5. Configurando el Email para poder enviar correos.

Por defecto el Plugin Users utiliza la opción 'default' de nuestra configuración de email que se encuentra en /project_name/app/Config/email.php, si necesitamos especificar otra, por ejemplo gmail, tendriamos que añadir la siguiente linea a nuestro fichero bootstrap.php: Configure::write('Users.emailConfig', 'gmail'); No olvideis declarar la variable $gmail con la configuración en vuestro fichero /project_name/app/Config/email.php.

Si queries saber como se configura CakePHP para enviar emails utilizando una cuenta de Gmail o una cuenta Smtp/Pop3 podeis revisar este post.

Para reescribir las plantillas para los Email hay que modificar los ficheros localizados en /project_name/app/Plugin/Users/View/Emails/txt


6. Utilizar la funcionalidad "Remember me".

Para habilitar esta funcionalidad tenemos que seguir los siguientes pasos (esto es muy bien explicado en la documetnacion del Plugin en Github simplemete voy a traducir lo que pone).

Primero abrimos nuestro AppController y añadimos el componente "User.RemeberMe" y el componente Auth (esto no esta indicado en la documentación pero es necesario añadirlo. public $components = array(
    'Users.RememberMe',
    'Auth'
);
Ahora siguiendo en nuesto AppController declaramos el método beforeFilter y añadimos lo siguiente: public function beforeFilter() {
    parent::beforeFilter();
    $this->RememberMe->restoreLoginFromCookie();
}

Con esto ya tendriamos la funcionalidad habilitada, el código lo que hace es leer las credenciales desde la cookie y logear al usuario segun estas.




lunes, 19 de mayo de 2014


Siguiendo con mis primeros post os traigo ahora un recurso muy interesante el Cheat Sheet de Laravel, una chuleta muy util para los que estamos empezando. ¿Que es un Cheat Sheet? Un Cheat Sheet es una agrupación consistente de notas utilizadas para una rápida referencia

Enlace: http://cheats.jesse-obrien.ca/

Tambien podeis revisar el Cheat Sheet CakePHP en este post.




Aquí os dejo el enlace a Cheat Sheet de CakePHP un recurso muy util cuando se empieza. Como ya sabeis un Cheeat Sheat es una agrupación consistente de notas utilizadas para una rápida referencia, nuestra chuleta sobre CakePHP.

Enlace: http://cakephpcheatsheet.com/

Tambien podeis echarle un vistazo al Cheat Sheet Lavarel, en el siguiente post.