Laravel

Configuración de Laravel 4 – Parte III

Con Laravel 4.1 han aparecido nuevos archivos de configuración, veamos que traen de nuevo.

Los invito también a revisar la primera parte y segunda parte, que también fuero actualizadas con nuevas opciones que aparecen en esta versión.

(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…)

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!.

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…)

Remover segmento ‘/public’ de la URL en Laravel

Cuando se empieza con un proyecto en Laravel por defecto el segmento ‘public’ de la URL es visible. A nivel de desarrollo puede que no moleste mucho – en mi caso sí me molesta -, pero cuando ya queremos montar nuestra aplicación y lanzarla al mundo obviamente no queremos ‘public’ esté ahí.

En primera instancia tenemos que entender que contiene el directorio ‘public‘ de Laravel. Como bien dice su nombre, contiene todo lo público de la aplicación – al que el navegador tendrá acceso -: hojas de estilo, javascript, imágenes, fuentes, favicon. En resumidas cuentas son los conocidos assets. Pero dentro de este directorio también deben ir los archivos: robots.txt, humans.txt, mapas del sitio y archivos públicos de descarga. Finalmente se encuentra el archivo index.php el que se encarga de arrancar el framwork.

(más…)

Configuración de Laravel 4 – Parte I

Luego de ya haber instalado Laravel, el siguiente paso es realizar las configuraciones básicas para que podamos empezar a trabajar. Es algo bastante simple de realizar, por lo cual dudo que tengan problema alguno.

Al igual que la gran parte de los framework que he probado, los archivos de configuración vienen separados de acuerdo a lo que se desea configurar.

En el caso de Laravel los archivos de configuración se encuentran en ‘app/config’. Los nombres son descriptivos, por lo que con una rápida mirada podrán darse cuenta que es lo que configura cada archivo. Cada archivo PHP es un simple array, y lo que me agrada bastante es que cada par de valores está documentado, indicándonos claramente las opciones disponibles y que labor realiza específicamente.

(más…)