PHP

Codeivate: tus estadísticas de programación

Si alguna vez te has preguntando ¿cuánto tiempo al día efectivamente lo dedico a programar? ¿cuál es el día y hora más productiva cuando programo? ¿a que lenguaje le dedico más tiempo?, esta herramienta que les voy a presentar les responderá eso y más.

Por las casualidades de la vida, me encontré con Codeivate, una herramienta que nos permite llevar registro de nuestras acciones mientras estamos programando en nuestro IDE o editor favorito. Llevo alrededor de 3 semanas probando la herramienta, y si bien está en una base temprana de su desarrollo (según entiendo está en beta), entrega datos interesantes que nunca están de más conocer.

(más…)

Anuncios

Reglas de validación condicionales en Laravel

Validar formularios con Laravel es genial, nos alivia mucho el trabajo y más aún si implementamos la validación como servicio. Pero la semana pasada en la aplicación que estoy desarrollando me encontré con un pequeño ‘pero‘ respecto a las reglas de validación: necesitaba validar un campo si y sólo si otro campo del formulario contenía un valor superior a 2.

Una forma de poder solucionar el problema era crear una regla de validación customizada para la ocasión, pero no quería hacer una solución tan específica. Con el afán de no estar inventando la rueda busqué en Google si existía algo que me permitiera hacer esto en Laravel, encontrándome con una regla de validación if..else en el foro oficial de la comunidad. De igual forma era una regla customizada, pero no con el enfoque que yo había pensado. Permitía hacer algo como esto:

'campo' => 'if_else:(otro_campo=1),required+numeric,numeric+max:10';

Entonces, eso se traduce a lo siguiente: las reglas de validación de campo dependen de la condición otro_campo=1. Por lo que si otro_campo es igual a 1, las reglas a ejecutar son required y numeric, de lo contrario las reglas son numericmax:10.

La solución funcionaba – luego de arreglar ciertos errores -, pero sabía que no era óptima y lamentablemente no tenía, ni tengo hasta el momento, el tiempo de crear una solución mejor. Teniendo en cuenta mi caso – el cual me hizo llegar a la búsqueda de todo esto -, pensé que este tipo de validaciones condicionales debían ser soportadas nativamente por Laravel. Mi aplicación es simple y estática, y si yo me encontré con ese tipo de problemas, me imagino que en una aplicación más compleja y dinámica de seguro aparecen situaciones como ésta.

(más…)

Custom Macros: Añadiendo soporte para campos tipo ‘date’ y otros en Laravel

Actualmente Laravel en su Form helper nos entrega soporte para campos input del tipo: label, text, hidden, password, email y file. ¿Pero que pasa cuando deseamos utilizar otro tiempo de campo, como lo es date?: debemos generar un Macro personalizado.

/*
|--------------------------------------------------------------------------
| Custom Form Macros
|--------------------------------------------------------------------------
|
*/

Form::macro('date', function($name, $value = null, $options = array()) {
    $value = ((is_null($value) or $value == '')) ? \Input::get($name) : $value;
    $input =  '<input type="date" name="' . $name . '" value="' . $value . '"';
    foreach ($options as $key => $value) {
        $input .= ' ' . $key . '="' . $value . '"';
    }
    return $input.'>';
});

Este código debe ir en el archivo global.php ubicado en ‘app/start‘, o si lo desean crear un archivo aparte y hacer el require.

De este modo hemos generado un nuevo tipo de campo para ser utilizado en nuestros formularios, al cual podemos llamarlo de la siguiente manera en nuestras vistas:

{{ Form::date('campo_fecha') }}

Podríamos mejorar el código para poderlo utilizar con cualquier tipo de campo que necesitemos, sin la necesidad de crear un Macro personalizado una y otra vez, algo así:

Form::macro('custom', function($type, $name, $value = null, $options = array()) {
    $value = ((is_null($value) or $value == '')) ? Input::old($name) : $value;
    $input =  '<input type="'. $type .'" name="' . $name . '" value="' . $value . '"';
    foreach ($options as $key => $value) {
        $input .= ' ' . $key . '="' . $value . '"';
    }
    return $input.'>';
});

De este modo podemos hacer uso de cualquier otro tipo de campo sólo indicando su nombre:

{{ Form:custom('date', 'campo_fecha') }}
{{ Form:custom('number', 'campo_con_numeros') }}
{{ Form:custom('url', 'campo_con_url') }}

ACTUALIZACIÓN (03/11/2013): Actualicé el código del macro. En vez de utilizar Input::get() se debía utilizar Input::old(), ya que luego de validar y querer re-popular el formulario, los datos enviados en el request anterior quedan en la sesión.

Poblar ‘drop-down list’ desde la DB con Laravel

¿Les suele pasar que crean una funcionalidad que ya existe y luego se dan cuenta que en vez de haber escrito 40 líneas de código el framework donde trabajan o el lenguaje que utilizan ya lo tiene implementado?. Bueno, a mi me pasa cada cierto tiempo, y hoy – hace muy poco – fue uno de esos momentos. A mi por lo menos me bajan la moral, por que claro, tu haces tu funcionalidad y dices “Wow!, está quedando genial, soy un maestro” y al rato después cuando descubres que eso ya estaba implementado te sientes pésimo, no por el hecho de que tu código está malo – y no lo está-, si no por el hecho de haber perdido el tiempo en re-inventar la rueda. Pero bueno, nadie es perfecto y no puedo saberme de memoria la documentación.

Voy a ser simple y conciso, porque la verdad escribo esto como recordatorio propio, aprovechando de compartir el “descubrimiento del día”.

(más…)

CodeIgniter busca nuevo dueño

Hoy – creo que hace muy poco – EllisLab, la empresa encargada del desarrollo de CodeIgniter publicó en su blog una entrada titulada EllisLab Seeking New Owner for CodeIgniter“. En ella declara oficialmente que se desligan del desarrollo de CodeIgniter y que están en busca de alguien que tome las riendas del famoso framework de PHP. El motivo es que simplemente EllisLab tiene otros objetivos como empresa, y no pueden ocupar recursos en algo que encaje con sus metas – ganar dinero -.

Creo que en parte es una falta de respeto el desligarse así como así de un proyecto que lleva años y que tiene una gran comunidad detrás, que llevan mucho tiempo esperando la supuesta versión 3.0 del framework – que está en desarrollo – y que han sido capaces de creer ciertos placebos que entregaba EllisLab a la comunidad cuando hacían consultas con respecto a CodeIgniter. Recuerdo una vez que pregunté en el foro que pasaba con la versión 3.0 o si el framework estaba muerto y mucha gente lo defendió diciendo que la versión 3.0 está en desarrollo que sólo había que esperar – eso les dijo EllisLab – y que la versión 2.0 funcionaba bien, por lo tanto ¿para qué cambia algo que funciona bien?. Pero era cosa de darse vuelta en el repositorio de GitHub y ver que el desarrollo actual está casi detenido, existen 2 o 3 desarrolladores – externos a la empresa – que siguen aportando en GitHub, pero de EllisLab ni sombra.

Mirando el lado positivo, es una gran oportunidad para que alguien – o la comunidad – con las ganas pueda revivir lo que fue CodeIgniter hace unos años y darle un nuevo aire, aprovechando nuevas tecnologías y herramientas que entrega PHP. Y de verdad espero que sea así y que llegue gente talentosa a aportar.

¿Podrá CodeIgniter tomar un nuevo rumbo y re-conquistar nuevos adherentes? ¿o tiene los días contados?

Registro de paquetes para Laravel

Como todo framework, Laravel permite instalar paquetes para extender o agregar funcionalidades. Esto se realiza mediante Composer, el cual de manera automática se encarga de descargar e instalar las dependencias correspondientes para que luego nosotros sólo debamos configurar y disfrutar del paquete que instalamos.

Para aquellos que andan en busca de paquetes o quieren echarle una mirada a que cosas hay creadas para llegar, instalar y usar, les recomiendo visitar el registro oficial – eso creo – de paquetes para Laravel:

http://registry.autopergamene.eu/

Hay para todos los gustos y tengan ojo porque hay tanto como para Laravel 3 y 4, no vayan a instalar uno que no es compatible.

¡Dense en tiempo y prueben algunos de ellos!.

Composer y como cambió la comunidad PHP

Una de las cosas que he leído bastante y me he dado cuenta de acuerdo a mi experiencia como desarrollador o en conversaciones con colegas del mundo PHP, es que existió un tiempo en que trabajar en este lenguaje significaba la mayoría del tiempo re-inventar la rueda una y otra vez. Quizás muchos tenían sus pequeñas librerías que los ayudaban en tareas comunes o muchos otros buscaban soluciones en sitios como PHPClasses, HotScripts o SourceForge para no perder el tiempo en cosas que ya estaban hechas o ver como se hacían y realizarlas ellos mismos. Las típicas instrucciones “descargue el ZIP, descomprima e incluya la librería a su código” ya sea para instalar o actualizar eran pan de cada día.

El termino package no era ampliamente utilizado en la comunidad y aquellos que los utilizaban contaban con una lista provista por PEAR, el cual vendría siendo el repositorio oficial de paquetes para PHP. Esto, hasta la aparición de Composer – gracias a Dios -.

(más…)

Sistema de Identificación simple en Laravel 4

Los sistemas de identificación son la primera capa de seguridad de nuestras aplicaciones, permitiendo autenticar a un usuario mediante sus credenciales y de este modo poder restringir el acceso o la realización de acciones no deseadas. De éste podemos derivar el control de acceso por grupos, permisos especiales y/o condiciones únicas dependiendo de la acción que se desea realizar. Un sistema de identificación puede ser bastante simple como muy complejo, y todo dependerá de las funcionalidades y requisitos que nos demande nuestro proyecto.

Laravel 4 nos facilita enormemente la realización de esta tarea. El framwerok de por si incluye un set de herramientas de seguridad las cuales nos permitirán tener en segundos un sistema de autenticación funcionando. En esta entrada también trataré de temas como las rutas, migraciones, realizar seeding de datos, creación de vistas utilizando Blade y otras pequeñas cosas más.

Veamos como ocupar esas herramientas para lograr nuestro objetivo.

(más…)