La Ravel

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 69

Comunidad

mike.nieva Mar. 22, 2015

Grupo en Facebook

Cuando estamos rodeados de personas que piensan, comparten y destacan


con su talento, irremediablemente empezaremos a hacer lo mismo.

Crecer como comunidad es uno de los retos ms grandes que tenemos como
plataforma. Sabemos que cuando un estudiante mejora, el resto tambin lo
har.

Es por ello que te invitamos a formar parte de nuestro grupo exclusivo en


Facebook.

C1-Reglas de codificacin y
lineamientos de cdigo PHP

sileence Mayo 9, 2014Siguiendo las sencillas reglas de esta gua

permite una mejor organizacin y productividad en la programacin de


proyectos en equipos o en solitario. Gran parte de estas reglas estn
basadas en las guas de estilo de grandes proyectos libres, como phpBB.

Estndares generales
Tabs o Espacios.
En el contenido dentro de corchetes, siempre se identar este contenido
con tabs. Cualquier editor decente puede configurarse para poner tabs
en vez de espacios en la identacin (Dreamweaver, Aptana, Eclipse, etc).

Aptana es uno de los editores que dan esa posiblidad.

Cabecera del archivo


Siempre es importante que todos los archivos .php inicien con una
cabecera especfica que indique informacin de la versin, autor de los
ltimos cambios, etc. Es de cada equipo decidir si se quiere o no agregar
ms datos.
/**
*
* @Control de presentacin de los weblogs. "weblog.php"
* @versin: 5.4.2

@modificado: 1 de Septiembre del 2006

* @autor: Freddie
*
*/

Comentarios en las funciones

Todas las funciones deben tener un comentario, antes de su declaracin,


explicando que hacen. Ningn programador debera tener que analizar el
cdigo de una funcin para conocer su utilidad. Tanto el nombre como el
comentario que acompae a la funcin deben bastar para ello.

Clases
Las clases sern colocadas en un archivo .php aparte, donde slo se
colocar el cdigo de la clase. El nombre del archivo ser el mismo del
de la clase y siempre empezar en mayscula. En lo posible, procurar
que los nombres de clase tengan una sola palabra.Las clases siguen las
mismas reglas de las funciones, por tanto, debe colocarse un comentario
antes de la declaracin de la clase explicando su utilidad.

Hacks
Los hacks que sea necesario colocar en el cdigo deben, como las
clases o funciones, ser comentados y en lo posible animar a otros
programadores a reemplazarlos o mejorarlos por soluciones mejores.

Ubicacin de archivos
En proyectos web o aplicaciones, generalmente se tendrn las siguientes
carpetas:
/ Carpeta raiz: Aqu irn los archivos .php a los que accede el usuario
directamente, interfaz, etc.
clases: Una carpeta conteniendo exclusivamente las clases usadas en el
proyecto
includes: Todos los archivos que sean llamados por otros .php en forma
de mdulos o de libreras de funciones.
db: En caso de tener la posibilidad de usar varias bases de datos, aqu
colocaremos los .php que manejen esas caractersticas multicapa para
cada sistema de datos soportado.
templates: En caso de usar un sistema de plantillas (Como smarty o el
de phpBB), aqu guardaremos todos los archivos .tpl.

Estilo y reglas de escritura de cdigo PHP


Nombres de variables
Por ms que parezca lo ms "cool", se recomienda no adoptar
la notacin hungara en el cdigo. Esta es aquella donde colocamos el
tipo de datos antes del nombre de variable: strNombre para un string. En
lo posible NO la usen, muchos grandes proyectos creen firmemente que
es una de las tecnicas de ofuscacin de codigo ms ampliamente usadas
en la actualidad.Los nombres deben ser descriptivos y concisos. No usar

ni grandes frases ni pequeas abreviaciones para las variables. Siempre


es mejor saber que hace una variable con slo conocer su nombre. Esto
aplica para los nombres de variables, funciones, argumentos de
funciones y clases.Todos los nombres deben estar en minscula
(Excepto con las clases, donde la primera letra ha de ser mayscula). En
caso de usar ms de una palabra, sta ser separada por un signo de
underscore "_".En las funciones, es importante que el nombre denote su
funcin inmediatamente. Cosas como imprimir_datos estn bien, pero
estara mejorimprimir_datos_usuario. De igual manera, en
los argumentos de las funciones queremos saber inmediatamente que
estamos usando. Es mejorcrear_usuario($nick, $email) que crear($n,
$e).La filosofa es sencilla. No daes la legibilidad del codigo por pereza.
Por supuesto, aplica el sentido comun y no crees funciones de ms de 4
palabras.

Siempre incluir corchetes


Es sencillo, si ibas a hacer esto:
if($cosa) funcion();

Mejor haz esto


if ($cosa)
{
funcion();
}

No gastas mucho tiempo adicional y ganas muchsimo en legibilidad.

Corchetes o llaves. Donde colocarlas


Aunque esto sea motivo de peleas constantes en los equipos de trabajo,
lo mejor es seguir el camino que permita mayor claridad en el desarrollo.
Para ponerlo en pocas palabras, todos los corchetes van en una lnea
propia.
if (algo)
{
for (iteracion)
{
//cdigo

}
}
while (condicin)
{
funcion();
}

Poner espacios entre signos


Otra cosa simple. Si tienes un signo binario, pon espacios a ambos
lados. Tienes un signo unario, pon espacios a uno de sus lados. O en
trminos ms simples, programa como si escribieras (bien) en espaol.
Es algo muy sencillo que puede ayudar de gran manera en la lectura del
cdigo.Esto est mal:
$a=0;
for($i=5;$i<=$j;$i++)

Esto est bien:


$a = 0;
for ($i = 5; $i <= $j; $i++)

Precedencia de operadores
Puedes ser un programador hardcore, pero, En serio te sabes la
precedencia de operadores en PHP? Como creemos que no, lo mejor es
siempre usar parntesis para estar seguro. Bsicamente, la idea es no
dejar operaciones complejas a freaks matematicos y estar seguros que
nuestros compaeros en el equipo con menos habilidad comprendan
todo sin problemas:
//Qu carajos da esto como resultado?
$bool = ($i < 7 && $j > 8 || $k == 4);

//En cambio, si lo pongo as, es obvio y sencillo


$bool = (($i < 7) && (($j < 8) || ($k == 4)));

//Pero este es incluso mejor, porque est ms optimizado y su lectura es


superior
$bool = ($i < 7 && ($j < 8 || $k == 4));

Cadenas de texto entre comillas


PHP tiene dos formas de poner strings o cadenas de texto. Con comillas
simples y con comillas dobles. La diferencia es que si usas comillas
dobles y metes dentro del texto un nombre de variable, el compilador lo
interpretar y reemplazar por su valor. Por sta razn siempre has de
usar comillas simples a menosque necesites hacer la interpolacin de
variables que permiten las dobles. Es difcil acostumbrarse porque ocurre
slo en PHP (Y algunos otros ms malignos, Perl4Life) pero por eso es
PHP.Por supuesto hay casos especiales donde es mejor usar dobles
comillas (Como cuando usas caracteres de escape \ intensivamente) as
que sintete con libertad de romper sta regla cuando sea en pro de
mejorar la lectura del cdigo.

Nmeros dentro del cdigo


A veces ponemos nmeros especiales dentro de nuestro cdigo para
situaciones especiales. NO LO HAGAS. Si necesitas poner un nmero
especial, convirtelo en constante y entonces implemntalo. Ejemplo:
define('ARTICULOS_PORTADA', 10);
for ($i = 0; $i < ARTICULOS_PORTADA; $i++)
{

Operadores unarios de suma y resta.


Es sencillo, salos en una sola lnea y a la derecha, ejemplo:
//Esto est MAL
$cosa = $matriz[$i--];
$otra = $matriz[++$y];

//Esto est BIEN


$y++;
$cosa = $matriz[$i];

$otra = $matriz[$y];
$i--;

Condicionales de una sola lnea


salas slo para hacer cosas simples. En lo posible siempre utiliza if
//Slo en estos casos son validas
$min = ($i < $j) ? $i : $j;

No uses variables sin inicializar


Si no tienes control sobre el valor de una variable, verifica que est
inicializada. Esto lo permite PHP de la siguiente manera:
//Mal hecho:
if ($cliente == 5) ...

//Bien hecho
if (isset($cliente) && $cliente == 5) ...

Pero slo usa est opcin cuando no tengas el control o no ests seguro
que valor pueda tener la variable (Como en variables que llegan por
parmetro o por GET, etc)

Instruccin switch
Esta es una de las cosas ms feas de los lenguajes con estilo de C.
Cuando debas usarla, intenta seguir el siguiente estilo:
switch ($mode)
{
case 'modo1':
// Codigo de exito
break;

case 'modo2':
// Algoritmo que me retirar a los 25 aos

break;

default:
// Cdigo si todo falla
break;
}

No obligatorio, pero recomendado. La programacin de proyectos PHP


en grupo se hace mucho ms efectiva aplicando estas reglas. Si deseas
ampliar esta informacin y conocer otras guas como reglas para efectuar
consultas SQL, para crear plantillas de diseo o para otros casos
avanzados, te invitamos a leer las Coding Guidelines de phpBB.

1 - Laravel, un framework PHP


sileence Mayo 6, 2014El

2012 sirvi para ver como la oveja negra a


PHP. Todos se deslumbraban con nuevos lenguajes/paradigmas como
Node.js, Ruby On Rails y dems. Si mencionabas PHP te comenzaban a
ver como aquel hombre de 45 aos, divorciado, con un trozo de pizza en
su escritorio y programando en COBOL.

Es cierto que se resaltaron muchas de las carencias del tan popular PHP,
pero eso lejos de matarlo, lo fortaleci. Se empez a trabajar en
versiones mejoradas, se aprendi de los nuevos lenguajes y empezaron
a llegar Frameworks de alto nivel, prcticos, fciles de usar y con un
futuro muy prometedor.

Laravel, un framework para PHP


He trabajado en un par de proyectos utilizando el Framework de Laravel
para PHP, y el resultado hasta ahora ha sido fantstico. La curva de
aprendizaje es relativamente sencilla.
Nunca antes haba sido tan fcil:
asociar una ruta a un controller y a una vista,
crear restful APIs est a dos pasitos,
el ORM es tan prctico como cualquiera que se base en el patrn
ActiveRecord
...en s es un Framework muy bien diseado.

Laravel se basa en la elegancia y simpleza. Programar ya no tiene que


ser tan doloroso y de hecho puede ser agradable con las herramientas
necesarias. Laravel es una de esas herramientas.
Est pensado para todos los programadores, inclusive los nuevos
programadores que estn iniciando con PHP, y ofrece grandes
experiencias de desarrollo a los programadores avanzados.
Gracias a la arquitectura nica de Laravel, posibilita a los desarrolladores
a crear y disear su propia infraestructura para sus aplicaciones de la
manera ms flexible.
Para m, Laravel, es la bandera ms fuerte que me hace seguir
apostando por PHP. Debo mencionar que he hecho proyectos con
Node.js, y me parece muy bueno, no estoy casado con ningn lenguage,
simplemente creo que an hay muchas razones para seguir trabajando
con PHP. Se habla mucho de de las diferencias de performance, en
casos prcticos se invita a que se demuestre eso, por
ejemplo, aqui Node.js tarda 0.389 seconds en procesar 1000 requests,
en cambio PHP 0.130 seconds.
No dejen de leer este artculo donde dan mas detalles de las cosas
buenas que se vienen para PHP.

C2 - Actividades para la clase 3


sileence Mayo 12, 2014

Nivel bsico
Creen nuevos controladores, acciones y vistas para probar el mini
framework

Nivel intermedio
Mejoren la clase View, creando getters como por ejemplo
"getTemplateFileName" similar a lo que hicimos en la clase Request, de
forma que quede ms POO y profesional.

Nivel avanzado
Creen nuevos objetos de tipo Response (similar a View) pero para
Json, Strings, u otros formatos
Separen los mtodos de Request que permiten analizar una url en otra
clase llamada RequestUrl, Request obtendra todos los datos de la URL
del objeto RequestUrl, ej:

$requestUrl = new RequestUrl($url);


$request = new Request($requestUrl);

Bonus Task:
Integren bootstrap en el layout.tpl.php

Redimensionar imgenes en PHP con


clases abstractas
sileence Mayo 19, 2014Las

clases abstractas en la programacin


orientada a objetos son clases de las que no se pueden crear
instancias/objetos directamente de ella.

Para qu defino una clase como abstracta si no puedo crear


objeto de ella?
Si puedes crear instancias pero solo de clases que hereden dicha clase
(que no sean abstractas por supuesto). El objetivo principal de la
herencia es mejorar la clase heredada. As que sabiendo esto, las clases
abstractas en su ms pura esencia son clases mejorables!
Una clase abstracta puede tener mtodos y propiedades como cualquier
otra clase.

Cuando debo definir una clase abstracta?


Cuando puedas crear diferentes clases que tengan propiedades y
mtodos comunes, y an sabiendo que en el futuro que puedes crear
ms clases del mismo tipo.
En la clase abstracta se definiran las propiedades y mtodos comunes,
para que las clases que la hereden no tengan la necesidad implementar
esos mtodos o definir las propiedades.

Mtodos Abstractos
As como hay clases abstractas, tambin hay mtodos abstractos. Estos
mtodos no son implementados en su definicin, pero obliga a las clases
que hereden el mtodo a implementarlo.
Un mtodo abstracto se puede definir en casi cualquier clase, no
necesariamente debe ser una clase abstracta. Un ejemplo en las que no
se deberan definir mtodos abstractos serian en las clases finales, pues
no se podran implementar.
Las clases finales: son las clases engredas en la POO su lema
principal: Nadie me puede mejorar!. Es decir, que no se pueden heredar.
Entonces se podra decir que son las opuestas a las clases abstractas
que son la de baja autoestima su lema: "Soy intil sola, mejorame por
favor ".

Redimensionar imgenes en PHP usando clase abstracta


Definimos una clase abstracta llamada ImageBase. Todas las clases que
hereden esta clase tendrn:
Las propiedades width y height, con sus respectivos setters y getters.
Adems de dos metodos comunes los cuales son: gdFromFile y
gdToFile.
Obliga a la clase que le herede a implementar el metodo save
Cdigo :
abstract class ImageBase
{
protected $width;
protected $height;

public function setWidth($w)

{
// gd solo maneja enteros, ergo obligamos que ancho sea entero.
$w = (int) $w;
// ancho debe ser mayor que 0
if ($w > 0)

$this->width = $w;

public function getWidth()


{
return $this->width;
}

public function setHeight($h)


{
// gd solo maneja enteros, ergo obligamos que alto sea entero
$h = (int) $h;
// alto debe ser mayor que 0
if ($h > 0)

$this->height = $h;

public function getHeight()


{
return $this->height;
}

/**
* Genera una imagen gd del archivo con nombre $filename
* Retorna FALSE si ocurrior algun error, por ejemplo: el tipo no es

soportado
*
* @param string $filename nombre del archivo
* @param int $type Tipo de imagen para saber que funcion usar
* @return resource Una imagen gd.
*/
protected function gdFromFile($filename, $type)
{
$gd = false;
switch ($type)
{
case IMAGETYPE_PNG:
$gd = imagecreatefrompng($filename);
break;
case IMAGETYPE_JPEG:
$gd = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_GIF:
$gd = imagecreatefromgif($filename);
break;
}
return $gd;
}

/**
* Guarda una imagen gd en el archivo de nombre $filename
*
* @param resource $gd La imagen a guardar

* @param string $filename nombre del archivo


* @param int $type Tipo de imagen para saber que funcion usar
* @return bool TRUE en caso de exito, FALSE en caso contrario
*
*/
protected function gdToFile($gd, $filename, $type)
{
$success = false;
// si $filename es nulo las funciones posteriores imprimiran en
la salida directamente
// aqui tratamos de evitar eso
$filename = (string) $filename;
if (trim($filename) != "")
{
// no tiene sentido verificar si el archivo existe, pues si
no existe se creara
// las siguientes funciones retornan false si ocurrio algun
error, true en caso de exito
switch ($type)
{
case IMAGETYPE_PNG:
$success = imagepng($gd, $filename);
break;
case IMAGETYPE_GIF:
$success = imagegif($gd, $filename);
break;
case IMAGETYPE_JPEG:
$success = imagejpeg($gd, $filename);

break;
}
}
return $success;
}

// Obligamos a que las clases que hereden esta clase implementen este
mtodo
/**
* La intencion de este metodo es que guarde la imagen creada en un
archivo
*
* @param string $filename Nombre del archivo
* @return bool TRUE en caso de exito, FALSE en caso contrario
*/
abstract public function save($filename);
}

Creamos ImageResize que hereda ImageBase.


Cdigo :
class ImageResize extends ImageBase
{

private $src;
private $origWidth;
private $origHeight;
private $origType;

private $hasError = false;

public function __construct($src)


{
$this->setSrc($src);
}

private function setSrc($src)


{
if (is_file($src))
{
// getimagesize retorna un arreglo si tuvo exito con la
informacion de la imagen
// false en caso contrario
$info = getimagesize($src);
if ($info !== FALSE)
{
$this->src = $src;
$this->origWidth = $info[0]; // ancho de la imagen
$this->origHeight = $info[1]; // alto de la imagen
$this->origType = $info[2]; // constante de php que tiene el
tipo de imagen, un entero

// por defecto usaremos las dimensiones de la imagen original


$this->resize($this->origHeight, $this->origHeight);
}
else
{

$this->throwError("$src is not an image file", E_USER_ERROR);


}
}
else
{
$this->throwError("$src is not file valid", E_USER_ERROR);
}
}

/**
* Asigna los valores a los que se redimensionara la imagen
*
* @param int $w ancho
* @param int $h alto
*/

public function resize($w, $h)


{
if ($w < 1)

$this->throwError("Ancho debe ser mayor que 0",

E_USER_NOTICE);
if ($h < 1)

$this->throwError("Alto debe ser mayor que 0",

E_USER_NOTICE);
$this->setWidth($w);
$this->setHeight($h);
}

/**
* Redimensiona la imagen con el ancho y alto asignado en resize

* y la guarda en el archivo de nombre $filename


*
* @param string $filename nombre del archivo
* @return bool TRUE en caso de exito, FALSE si algo salio mal
*/

public function save($filename)


{
$success= false;
// obtenemos la imagen en gd del archivo
$orig = $this->gdFromFile($this->src, $this->origType);
if ($gd !== FALSE) // si lo obtuvimos
{
// creamos una imagen vacia con ancho y alto, servira de
contenedor
$base

= imagecreatetruecolor($this->width, $this->height);

// aqui redimensionamos la imagen


// la imagen redimensionada queda en $base, esta funcion retorna
TRUE si tuvo exito, FALSE en caso contrario
$resized

= imagecopyresampled($base, $orig, 0, 0, 0, 0, $this-

>width, $this->height, $this->origWidth, $this->origHeight);


if ($resized) // pudimos redimensionar
{
// guardamos gd en el archivo $filename
if (!$this->gdToFile($base, $filename, $this->origType))
{
$this->throwError("Archivo no generado", E_USER_WARNING);

}
else
{
// todo salio bien
$success = true;
// liberamos los recursos gd
imagedestroy($base);
imagedestroy($orig);
}
}
}
else
{
$this->throwError("Gd no fue generado.", E_USER_WARNING);
}
return $success;
}

private function throwError($msg, $level)


{
trigger_error($msg, $level);
}
}
?>

Uso de ImageResize
Cdigo :
<?php
$src = "archivo.jpg";
$dest = "archivo150x150.jpg";
$resize = new ImageResize($src);
$resize->resize(150,150);
if (!@$resize->save($dest))
{
echo "Archivo no fue generado. Error: " . error_get_last();
}
else
{
echo "Archivo $dest generado.";
}
?>

Que otra clase pudiera heredar ImageBase?


Que tantas clases puede crear con la libreria gd de php?
Captcha: una clase que genere captcha.Grficos: una clase que genere
grficos.Thumbs: si no te gusta ImageResize, mejorala o crea tu propia
clase.
Se te ocurre una otra? Comenta aqu.
Nota: la implementacin de ambas clases se pueden mejorar. La nica

intencin de estas implementaciones es mostrar un ejemplo real de como


se deben usar y lo til que son las clases abstractas.

4.1 - Anlisis y extensin de clases en


PHP con ReflectionMethod
sileence Mayo 9, 2014Reflection es una clase o ms bien un
conjunto de clases de PHP que permiten saber todo sobre tus otras
clases, mtodos, funciones, parmetros, etctera... Quizs es una de las
funcionalidades ms c00l
que PHP ha agregado recientemente y
quizs una de las que menos se conoce o se usa: ReflectionMethod.
Por ac les dejo un cdigo que me pareci bastante prctico y su
siguiente explicacin:
Supongamos que necesitan llamar a un mtodo de una clase (un
controlador o algo as) usando call_user_func_array desde alguna parte
de nuestro script, pero antes de llamarlo directamente, quieren validar
que:
El mtodo a llamar sea pblico
La cantidad de parmetros enviados no es menor que la cantidad de
parmetros requeridos por el mtodo.
Y adicionalmente les gustara no slo pasar los parmetros como
parmetros ordinarios, sino tambin tenerlos disponibles en una clase
aparte, es decir, que al llamar a una funcin como:
Cdigo :
function verLista($year, $month)

Con los siguientes valores:


Cdigo :

call_user_func_array(array($controller, 'verLista'), array(2008, 10));

Permita generar en el Controller un objeto con los siguientes valores:


Cdigo :
$this->params->year = 2008;
$this->params->month = 10;

Lo cual tal vez sera util si ms adelante se necesita pasar estos valores
de un mtodo a otro dentro del controlador sin necesidad del uso de
parmetros y si se quiere agregar una seguridad extra al script (como
bloquear la posibilidad de sobreescribir o reemplazar parametros)
En fin, esta es la idea.. Aqu el cdigo:
Primeramente tenemos una clase bsica llamada ControllerParams que
permite guardar y obtener datos / parmetros:
Cdigo :
class ControllerParams
{

private $params = array();

function __set($name, $value)


{
$this->params[$name] = $value;
}

function __get($name)
{

return $this->params[$name];
}

Y aqu el mtodo que hace la funcionalidad ya descripta:


Cdigo :

class Controller
{

protected $params = null;

final function execute($action, $params = null) //funcion intermedia


{

$reflectionMethod = new ReflectionMethod($this, $action); //se crea


una instancia de ReflectionMethod con la referencia al metodo que
necesitamos llamar

//asi ya tenemos disponible las funcionalidades de ReflectionMethod:

if(($action == 'execute') || !$reflectionMethod->isPublic() ||


(count($params) < $reflectionMethod->getNumberOfRequiredParameters()))
{
//LANZAR ERROR
}

$parametros = $reflectionMethod->getParameters(); //con esto


obtenemos los parametros de nuestro metodo

$this->params = new ControllerParams();

foreach($parameters as $key => $parameter) //y hacemos un ciclo con


ellos
{
$name = $parameter->getName(); //obtenemos el nombre

if(isset($params[$key])) //si el usuario mand algun valor lo


asignamos
{
$this->params->$name = $params[$key];
}
else
{
$this->params->$name = $parameter->getDefaultValue(); //sino
tambien podemos tomar el valor por defecto
}

call_user_func_array(array(&$this,
ultimo hacemos el llamado de costumbre
}

$action),

$params); //y por

Ntese que los parmetros son tambin objetos con funcionalidades


...

C2 -10 errores comunes


programando orientado a objetos en
PHP
sileence Mayo 9, 2014El dominio de la programacin orientada a
objetos es, sin duda, uno de los paradigmas ms codiciado por los
programadores. Sin embargo, muchas veces estos cometen
"atrocidades" al intentar implementarlo solo por decir a sus amigos,
empresas u otros "Yo s programar orientado a objetos".
A continuacin vern una lista de 10 cosas que no se deben hacer al
implementar programacin orientada a objetos enfocndonos en el
lenguaje PHP.
Usar variables globales dentro las clases: una de las ventajas ms
importantes de la programacin orientada a objetos es la reusabilidad de
los cdigos. Al usar variables globales ($_GET, $_SESSION, $_POST,
$_COOKIE, global) dentro de las clases, esta se ve comprometida
considerablemente. La razn es que todos los proyectos no tienen las
mismas variables globales.
Mezclar cdigo HTML en la definicin de las clases: es una de las
cosas que me sorprenden cada vez que la veo. Es inaceptable que esto
se le haya ocurrido a algunos. Al mezclar HTML en el cdigo PHP se
compromete la reusabilidad de la clase, no todos los proyectos tienen el
mismo cdigo HTML.

Imprimir salida (echo) dentro de las clases: aunque esto se parece a


la anterior, me refiero a los echo o similares dentro de los mtodos. Si
una clase no est destinada para emitir salida no lo debe hacer. Para eso
muchos utilizamos sistemas de plantillas.
Identificadores de clases, mtodos y propiedades sin sentido: un
identificador siempre debe ser lo ms descriptivo posible. A muchos le
gusta usar identificadores increblemente irrelacionados con su propsito.
Esto compromete enormemente la lectura de un cdigo. (Mira las reglas
de codificacin en PHP)
Mezclar uso de versiones de php en una misma clase: a partir de la
versin 5 de PHP, la programacin orientada a objetos se puede
implementar de una manera ms formal, pues se introdujo los
modificadores de visibilidad public, private, protected. Aparte de que se
pueden crear clases de alto nivel (clase Abstractas) y mtodos abstractos
con la palabra reservada abstract. Tambin se pueden definir los
mtodos y propiedades estticas formalmente con la palabra reservada
static. Mezclar la programacin orientada a objetos en PHP 4 (donde
todo era publico) con la de PHP 5 hace un cdigo sucio. Consejo: elige
una de las versiones y programa para ella.
Ms de una clase en un mismo archivo: definir distintas clases en un
mismo archivo es otra de las cosas que no se debe hacer. Las clase se
han de componer lo ms reusables posible y si puedes nombrar al
archivo con el nombre de la clase muchsimo mejor. Sigue el camino de
los grandes lenguajes como: Actionscript, Asp.net, Java entre otros.
No hacer pruebas unitarias a las clases: al terminar de codificar una
clase recuerda de hacer pruebas unitarias para asegurar el correcto
funcionamiento de clase. Esto es simplemente probar todos los posibles
caminos que pueda tomar un estado (propiedad), parmetro de mtodo,
etc para que la clase no explote.
Todos los mtodos y las propiedades publicas en una clase de PHP
5: los programadores novatos cometen el error de definir todos los
mtodos y propiedades como pblicos, por desconocer las ventajas de
los modificadores visibilidad. En PHP este es un problema grave porque

no hay tipeado de datos. El problema de las propiedades pblicas es que


no podemos controlar de manera fcil el tipo de datos que contiene por lo
que nuestra clase pudiera explotar por un tipo de dato inesperado. Si no
estas seguro de que visibilidad le debes poner a una propiedad hazla
privada. Valida los tipos de datos de las propiedades al menos de una
manera bsica.
Duplicacin de mtodos para ocultar falla de lgica: A diferencia de
otros lenguajes como Java y C++, PHP no admite la sobrecarga de
mtodos. Al menos no de la manera tradicional. Esto, sin embargo, no es
excusa para duplicar mtodos slo porque un dato cambia para la
operacin que ste realiza.
Variables de configuracin dentro de las clases: Los datos de
configuracin de base de datos, web services y otros deben ir en un
archivo de configuracin aparte, NO dentro de la clases que hacen uso
de estas. Aunque se admite en clases que sea exclusivamente para ello.

2.2 - Configurar Base de Datos y crear


tablas con Laravel
sileence Abr. 10, 2014En

los tutoriales anteriores, vimos

una introducin al framework Laravel y aprendimos cmo instalar


Laravel y Composer. De ahora en adelante comenzaremos un tutorial
terico - prctico de Laravel.

Crear un mdulo de Usuarios con Laravel


Si bien no es el mdulo ms emocionante del mundo, lo considero
prctico dado que hace falta en la mayora de las aplicaciones. Para

comenzar, necesitamos configurar nuestra base de datos y crear la tabla


de usuarios.

Cmo configurar la base de datos en Laravel


Lo haremos en cuatro sencillos pasos:
1 - Abrimos el archivo database.php localizado en:
Cdigo :
app/config/database.php

2 - En la lnea 29, encontraremos lo siguiente:


Cdigo :
'default' => 'mysql'

Si estamos trabajando con MySQL, como es mi caso, dejaremos la lnea


intacta, sino editaremos el valor entre comillas a sqlite, pgsql, etc. segn
sea el caso.
Entre las bases de datos soportadas por defecto en Laravel
encontramos: MySQL, SQL Lite, PostgreSQL y SQL Server.
3 - Usamos PHPMyAdmin o cualquier otra herramienta de nuestra
preferencia para crear la base de datos, en mi caso, con PHPMyAdmin y
MySQL crear una DB llamada pruebalaravel:
Cdigo :

CREATE DATABASE `pruebalaravel` ;

4 - Una vez creada la DB debemos indicarle a Laravel el nombre de


nuestra base de datos y un usuario con acceso a ella, para MySQL
tenemos en el mismo archivo database.php lo siguiente (lnea 55):
Cdigo :
'mysql' => array(
'driver'

=> 'mysql',

'host'

=> 'localhost',

'database'

=> 'pruebalaravel',

'username'

=> 'root',

'password'

=> 'CLAVE_ULTRA_SECRETA',

'charset'

=> 'utf8',

'collation' => 'utf8_unicode_ci',


'prefix'

=> '',

),

All cambiamos database por el nombre de nuestra base de datos:


Cdigo :
'database'

=> 'pruebalaravel',

Y ms abajo el usuario que hayan configurado cuando instalaron MySQL,


comnmente root, luego, en la lnea siguiente, el password que

dependiendo de su instalacin pudiese estar en blanco o ser una clave


ultra secreta.
Una vez configurada la DB, veamos:

Cmo crear las tablas en la base de datos con Laravel


Para ello usaremos migraciones.
Las migraciones permiten configurar y modificar la estructura de
una base de datos. Creando una especie de control de versiones de
base de datos que puede ser usada por una o ms personas dentro del
equipo de desarrollo.
Por ejemplo:
Inicialmente crearemos una tabla llamada users.
En unas semanas necesitaremos otra tabla llamada tasks.
Luego agregaremos un campo adicional llamado role en la tabla users
para dividir los administradores de los usuarios normales.
Cada uno de estos pasos implicar crear una migracin diferente con la
que el framework sabr cmo modificar la base de datos, tanto hacia el
nuevo esquema (del paso 1 al paso 2) como al esquema anterior (por
ejemplo: de vuelta al paso 2 desde el paso 3).
Ahora veamos:

Cmo instalar el sistema de migraciones en Laravel


Abrimos nuestra consola o terminal (recuerden usar la consola instalada
por GIT si usan Windows) y tipeamos lo siguiente:
Cdigo :
php artisan migrate:install

Artisan es la interface de comandos de consola que trae Laravel


Si configuramos bien la base de datos deberamos recibir el siguiente
mensaje:
Cdigo :
Migration table created successfully

(Sino recibes este mensaje, vuelve al punto anterior sobre configurar la


base de datos y revisa que todo est bien)
Tabla de migracin creada con xito?
S, si vuelves a tu herramienta de base de datos (ej. PHPMyAdmin) vers
la siguiente tabla:

Esta es una sencilla tabla que usa Laravel para conocer el estado de la

migracin en tu servidor, por ahora est vaca.


Siguiente paso:

Crear nuestra primera migracin con Artisan y Laravel


Para ello ejecutamos el siguiente comando:
Cdigo :
php artisan migrate:make create_user_table

Si todo sali bien, recibiremos un mensaje similar a ste:


Cdigo :
Created Migration: 2013_09_03_211545_create_user_table
Generating optimized class loader

El primer mensaje (migracin creada) nos indica que fue creado el


archivo donde vamos a:

Crear el esquema de nuestra tabla usando el Schema Builder

Abrimos el archivo localizado en:


Cdigo :
app/database/migrations/2013_09_03_211545_create_user_table.php

El nombre del archivo adems de lo especificado por nosotros


(create_user_table) contiene una fecha/hora que permite indicarle al
framework el orden en que fueron creadas las migraciones, en mi
caso 2013_09_03_21...
Ok, abrimos el archivo, tenemos la siguiente estructura:
Cdigo :
<?php

use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}

/**
* Reverse the migrations.
*

* @return void
*/
public function down()
{
//
}

Bsicamente tenemos una clase llamada CreateUserTable y dentro tiene


dos mtodos up and down.
El mtodo up servir, en este caso, para definir nuestra tabla,
reemplacemos el mtodo vaco por lo siguiente:
Cdigo :
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function($table)
{
$table->increments('id');

$table->string('email');
$table->string('password');
$table->string('full_name');

$table->timestamps();
});
}

Dentro tenemos un llamado al Facade Schema::create que nos permite


crear el esquema de una tabla usando una interfaz de PHP orientada a
objetos, es decir, como si nuestra tabla fuera un objeto.
Schema::create acepta como primer parmetro el nombre de nuestra
tabla, en este caso: users
El segundo parmetro es una closure o funcin annima al cual se le
inyecta el objeto $table, dicho objeto nos permitir definir los campos de
nuestra tabla, por ejemplo:
Cdigo :
$table->increments('id');

Le dice a Laravel que nuestra tabla tendr un campo de tipo auto


incremento llamado id, el cual es muy comn en MySQL.

Luego le decimos a Laravel que necesitamos un campo string llamado


email:
Cdigo :
$table->string('email');

Pero en MySQL no existe el campo de tipo string...


Laravel se encarga de ello convirtiendo al tipo adecuado de acuerdo a la
base de datos que hayamos configurado al principio, en el caso de
MySQL nuestro campo resultante ser de tipo VARCHAR.
Lo mismo para password y full_name, al final tenemos lo siguiente:
Cdigo :
$table->timestamps();

?
Bsicamente este mtodo le dice a Laravel que queremos crear 2
campos, uno llamado created_at y otro updated_at ambos de tipo
TIMESTAMP que servirn para saber cuando fue creado o modificado
cada uno de los registros de nuestra tabla.
Ok, Estn listos? Vamos a ejecutar la migracin: vamos de nuevo a la
consola y escribimos lo siguiente:
Cdigo :

php artisan migrate

Si todo sali bien recibiremos un mensaje as:


Cdigo :
Migrated 2013_..._create_user_table

Ahora corremos a ver el PHPMyAdmin y

Voil!
S que estn emocionados con nuestra nueva tabla, pero -aunque suene
doloroso- tendremos que deshacernos de ella, no se preocupen,
crearemos una nueva ms tarde y nadie notar la diferencia:
Reemplacemos el mtodo down por lo siguiente:
Cdigo :
/**
* Reverse the migrations.
*
* @return void
*/
public function down()

{
Schema::drop('users');
}

S:
Cdigo :
Schema::drop('users');

Es el fatdico mtodo que eliminar nuestra recin creada tabla users,


ahora tomen valor y escriban en la consola:
Cdigo :
php artisan migrate:rollback

Recibiremos el siguiente mensaje:


Cdigo :
Rolled back: 2013...create_user_table

Indicndonos que migracin se ha descartado. Corremos a


PHPMyAdmin pero nuestra tabla users no est, its gone Se ha ido.
No puede ser!

Rpidamente regresamos a la consola y tipeamos de nuevo:


Cdigo :
php artisan migrate

Volvemos a PHPMyAdmin y Nuestra tabla users est de nuevo con


nosotros! Djenla all por ahora, la necesitaremos en un prximo tutorial.
Adems de agregar drama a nuestra vida, el rolled back sirve tanto si
cometimos un error definiendo una tabla, como si queremos regresar
nuestra base de datos a un estado anterior. Ms adelante aprenderemos
un poco ms sobre las migraciones en Laravel.
Es todo por ahora Qu les pareci el tutorial? Cuntanos en los
comentarios. Adems me gustara saber si quieren que les explique un
poco ms sobre programacin orientada a objetos en PHP 5.3, por
ejemplo: Qu es un namespace? En un prximo tutorial.
Usa los enlaces claves dentro del mismo tutorial para descubrir artculos
interesantes relacionados con el tema.
Espero les haya gustado esta tercera parte, nos vemos en los
comentarios y en la siguiente entrega.
Saludos a todos
Curso profesional de PHP con Laravel - Abr. 10, 2014

3.1 - Instalacin de composer y laravel

Escribe tus comentarios y aportes

sebastiancamacho7927
hace 1 mes, 2 semanas
Si tuvieron problemas para crear la migracin:
[InvalidArgumentException]
Command "migrate:make" is not defined.
Did you mean one of these?
migrate:reset
migrate:refresh
migrate:status
migrate:rollback
migrate:install
migrate
Es probable que estn usando la versin 5 de laravel, donde se cambi la sintaxis para
esta accin.
La nueva sintaxis es:
php artisan make:migration create_user_table
Saludos desde Uruguay!

nelsonkewebs
hace 3 das, 20 horas
Hay que especificar en cada material que versin de Laravel se utiliza. En esta
documentacin se utiliza la versin 4.*

Saludos

2.3 - Primeros pasos con Laravel

sileence Abr. 10, 2014Ya sabes

qu es Laravel, ya lo
instalaste y configuraste la base de datos? Muy bien, porque pronto
comenzaremos a programar nuestro mdulo! Pero antes, en esta cuarta
entrega, hablaremos un poco sobre cmo funciona la web:
Los sitios web funcionan con un protocolo llamado HTTP que permite
que un cliente se comunique con un servidor y viceversa. Veamos un par
de grficos sencillos sobre esto:

Veamos, esta es una sencilla peticin (request) donde tu navegador


(Firefox) solicita obtener (GET) la informacin de la pgina
cristalab.com/tags/laravel. Una vez que leas el tutorial querrs dejar un
comentario, para ello llenars el formulario al final del post y apretars el
botn enviar comentario, en ese momento se producir otra solicitud:

Ahora Firefox le dice al servidor de cristalab.com que quiere publicar


(POST) un comentario, y obviamente le enva la informacin
correspondiente (tu email, tu comentario) y Cristalab devolver un cdigo
200 (todo bien, la pgina fue encontrada, el servidor funciona bien), sin
embargo el HTML contendr un mensaje de xito o un mensaje de error.
En resumen cada peticin (Request) tiene un verbo (GET, POST son los
ms comunes) y una direccin (cristalab.com/tags, laravel.com/docs,
etc.). Una respuesta (Response), por otro lado, se constituye de un
cdigo (200 si todo est bien, 404 si no fue encontrada la pgina, 500
error de server, etc.) y el cuerpo de la respuesta, que es por lo general
HTML.
Los programadores expertos dirn: Y que hay de los HEADERS? Y
las variables de sesin? No te olvides de las cookies!
Lo s, pero quera mantener esto sencillo; veamos, adems de lo que ya
les expliqu cada peticin y respuesta transporta otros datos como
headers, variables de sesin y cookies.

Por ejemplo, un header en una peticin puede tener la informacin de la


IP del usuario, en PHP prueben
imprimiendo $_SERVER['REMOTE_ADDR'] o de donde proviene el
usuario $_SERVER['HTTP_REFERER'] o el navegador que usa
$_SERVER['HTTP_USER_AGENT']
Ok pero esta informacin no es segura
Dicen los expertos y s, tienen razn, pero mantengmoslo simple por
ahora.
Las variables de sesin (Session) almacenan tu informacin cuando, por
ejemplo, haces login en una pgina y se borran cuando haces logout. Si
le dices a un sitio web que recuerde tu usuario por dos semanas,
probablemente eso vaya a una Cookie, que es un pequeo archivo que
se almacena en tu computador. Ms adelante veremos todo esto en
detalle.
Por ahora recuerden Solicitud = Verbo + Direccin. Respuesta = Cdigo
+ Texto.

Ok, comencemos a programar con Laravel


Est bien! Tranquilos. Vamos a comenzar abriendo el archivo
app/routes.php
Listos?. En este archivo se manejan las rutas de Laravel. Es,
digamos, la primera capa de nuestra aplicacin.

Y qu es lo que hace una ruta?


Vern, una ruta recibe una peticin (Request) del usuario y luego de un
determinado proceso debe devolver una respuesta (Response):

Entonces esto:
Cdigo :
Route::get('/', function()
{
return View::make('hello');
});

Significa que cuando el usuario solicite (GET) la pgina de inicio ( / ) va a


recibir respuesta cdigo 200: todo bien y el HTML de la vista hello
(views/hello.php).
Como ven Laravel nos brinda una interfaz elegante y sencilla para poder
manejar las solicitudes y devolver las respuestas adecuadas.
Por debajo, Laravel se apoya en el excelente componente HTTP
Foundation de Symfony2 que encapsula, mejora y normaliza todas las
funcionalidades que ya trae el lenguaje PHP para manejar requests y
responses.
Obviamente nuestra aplicacin necesitar mucho ms que una pgina
para funcionar, veamos cmo hacer una segunda pgina:
Guindonos por la ruta inicial vamos a escribir otra debajo de esa, as:
Cdigo :
Route::get('cristalab', function()
{
return View::make('cristalab');
});

Ahora copien y peguen el archivo app/views/hello.php dentro de la misma


carpeta, cambien el nombre a cristalab.php, y cambien el contenido de
app/views/cristalab.php que hay dentro del <body> </body> por este

HTML:
Cdigo :
<div class="welcome">
<a href="http://cristalab.com" title="Cristalab"><img
src="http://www.cristalab.com/images/header/logo.png"></a>
<h1>Hello Cristalab!</h1>
</div>

Ahora escriban en el
navegador http://localhost/pruebalaravel/public/cristalab
Excelente, no?
S, pero parece muy simple
Est bien, compliquemos un poco las cosas. Nuestras rutas pueden tener
parmetros que nos permitirn tener rutas dinmicas, y ms complejas,
por ejemplo:
Cdigo :
Route::get('hello/{usuario}', function($usuario)
{
return "Hello $usuario";
});

Si el resultado de una ruta es una cadena de texto (string), Laravel


devolver una respuesta de tipo 200 (todo bien) y el cuerpo ser dicho
texto.
Ahora en su navegador tipeen: hello/tu-nombre
Exacto! As pueden tener una URL dinmica que responda a cualquier

nombre. Lo mismo nos servira para tags, tutoriales, etc. Otro ejemplo:
Cdigo :
Route::get('tags/{tag}', function($tag)
{
return "You are browsing $tag tag";
});

Quieren limitar un parmetro a que slo sea nmeros, por ejemplo?


Sencillo:
Cdigo :
Route::get('user/edit/{id}', function($id)
{
return "You are editing the user with the ID #$id";
})
->where('id', '[0-9]+');

Noten el mtodo where que se concatena a nuestra ruta y usando una


expresin regular muy simple ([0-9]+) se limita a que el parmetro id
sea compuesto por uno o ms nmeros del 0 al 9.
Tipeen user/edit/5 y recibirn el mensaje: "You are editing the user
with the ID #5". Pero si ahora tipean user/edit/laravel recibirn un error
404 dado que ni esta ni otra ruta coincide con nuestra peticin.
Laravel nos brinda otros tipos de respuestas que analizaremos ms
adelante.
Tambin veremos las rutas ms a fondo as como la creacin de
controladores en un prximo captulo.
Espero que les haya gustado. Espero leer tu opinin en los comentarios.

Stay tuned.

2.1 - Cmo instalar Laravel y Composer


sileence Abr. 10, 2014En

el captulo anterior de Introduccin a

Laravel les mostr un poco sobre la fcil sintxis de Laravel. Tambin les
mencion brevemente que detrs de esta interfaz que nos permite casi
hablarle al framework: redireccioname a, haz una vista con este
parmetro/valor, debajo de todo eso se esconde una
arquitectura SLIDA de desarrollo, haciendo a Laravel un framework de
PHP ideal tanto para principiantes como para expertos.
Mi intencin era despertar la curiosidad en la herramienta, si ests ac,
quizs tuve xito. Ahora es momento de ver cmo instalar Laravel y
Composer.

Requisitos para Instalar Laravel


Laravel es un framework para PHP, obviamente tiene como
requisito tener instalado... PHP, en este caso, la versin de PHP 5.3.2.
Adems necesitaremos laextensin MCrypt de PHP. Tambin necesitan
un servidor web como Apache y una base de datos como MySQL. Hay
cientos de artculos sobre cmo conseguir todo esto, tambin hay
herramientas como XAMPP que instalan todo esto por t.

Ms adelante necesitarn el mdulo Rewrite (mod_rewrite) de


Apache. Si han trabajado antes con otros frameworks sabrn de qu les
hablo, sino, por ahora les comento que es un mdulo que hace
posible URLs amigables como las de Cristalab:
Cdigo :
cristalab.com/tutoriales/introduccion-a-laravel-c111339l/

En vez de:Cdigo :
cristalab.com/tutoriales.php?id=c111339I.

Estas son tiles para los motores de bsqueda y tambin para los
usuarios. En otro tutorial hablaremos de esto.
Tambin necesitarn un conocimiento bsico de PHP, es un plus si
saben de programacin orientada a objetos o si ya han usado otros
frameworks. Igual tratar de explicar todo detalladamente y adems
tenemos la seccin de comentarios donde pueden hacer preguntas, con
suerte adems de m, otros usuarios tambin quieran ayudar a aclarar
dudas.

Cmo instalar Laravel y Composer


Si tienen experiencia con PHP sabrn que ste es un lenguaje
interpretado, bsicamente una library para PHP (un framework por ej.) no
es ms que una serie de archivos .php dentro de carpetas dentro de subcarpetas, y para instalarlo por lo general no hace falta ms que descargar
archivos de un repositorio GIT o de una pgina, descomprimirlos en

algn lado y listo.


Para instalar Laravel 4, hace falta un paso extra. Pero no nos
preocupemos, en realidad es una ventaja que nos pondr no slo a
Laravel sino a miles de paquetes a nuestra disposicin, me refiero a
Composer.

Composer
Composer es un excelente manejador de paquetes y dependencias
entre paquetes para PHP.

Qu son dependencias y paquetes?


Imagina que tienes un pequeo proyecto como ir de viaje de una ciudad
a otra y para hacerlo necesitas un medio de transporte, en este caso,
digamos, un automvil.
Si fueras un programa de software el automvil sera un paquete, y tu
viaje sera la aplicacin que "depende" de l.
Entonces, en este caso, Composer viene siendo como el personaje Tank
de la pelcula Matrix, t le dices Composer, necesito un auto para mi
viaje y Composer se encarga de buscar el paquete auto e instalarlo para
ti. Luego auto le dir a Composer que necesita tambin un
paquete motor, otro paquete sistema de frenos, y as
sucesivamente. Composer ir buscando e instalando cada paquete y

las dependencias de cada subpaquete, recursivamente, hasta armar


el auto, todo lo cual ser transparente para ti.

Cmo instalar Composer


Aqu tienen las instrucciones de la pgina oficial, bsicamente hay dos
formas:

Instalar Composer en Linux:

Ejecuten desde su consola el siguiente comando:


Cdigo :
curl -sS https://getcomposer.org/installer | php

O si no tienen CURL instalado:


Cdigo :
php -r "eval('?
>'.file_get_contents('https://getcomposer.org/installer'));"

Si todo sale bien ya podrn usar Composer con el siguiente comando:


Cdigo :
php composer.phar

Instalar Composer globalmente.


Es mejor instalar y tener disponible Composer en todo todo el sistema,
para ello hay que renombrar el archivo a composer (sin extensin) y
moverlo a /usr/local/bin.
Si no tienes el directorio /usr/local/bin puedes ejecutar echo $PATH en la
consola para obtener las carpetas adecuadas.

Instalar Composer en Windows:


Descarga el instalador desde aqu o desde la pgina oficial (para
desconfiados), ejectalo y presiona: siguiente, siguiente, finalizar.

Tambin les har falta una consola de GIT, yo uso sta. Mismo proceso:
descarguen, ejecuten, siguiente, siguiente, finalizar.

Instalar Laravel
Una vez instalado composer, usando la consola/terminal (si estamos en
Windows usaremos la consola de GIT que recien instalamos), vamos a
nuestra carpeta de proyectos, por ejemplo: cd /var/www o
/home/usuario/proyectos_web/ o /c/xampp/httpdocs/ y all tipeamos:

Cdigo :
composer create-project laravel/laravel pruebalaravel

Para usuarios de Linux que no instalaron Composer


globalmente:

(El comando sera php composer.phar y necesitaran obviamente tener el


archivo composer.phar en la misma carpeta desde donde ejecutan el
comando)
Tiempo de ir por un caf.
Mientras nos tomamos un descanso, Composer se encargar de
descargar el proyecto base de Laravel, el framework y todas sus
dependencias.
Si son curiosos vern cmo la consola va descargando decenas de
paquetes que sern usados por Laravel ms adelante.

Algunos de estos paquetes pertenecen al framework Symfony.

Symfony?

S, antes cuando elegamos un framework como Codeigniter, Symfony o


Cake, elegamos una herramienta y descartbamos las otras. Si nos
gustaba lo fcil que era Codeigniter pero tambin nos gustaba el ORM de
symfony 1.4 tenamos que decidirnos por uno o por otro, o elegir
Codeigniter y buscar en foro tras foro cmo integrar el ORM usado por
symfony nativamente (Doctrine 1.2 en este caso) en Codeigniter, cruzar
los dedos y esperar que todo saliera bien.
O supongamos que queramos crear un nuevo CMS para PHP, pero an
as estbamos totalmente satisfechos con la forma en cmo symfony
maneja las rutas. No haba forma fcil de usar slo las rutas de symfony,
porque era un framework "acoplado" y tenamos que elegir usar todo o
nada.
Con la salida de proyectos como Symfony 2 y Composer, esto
cambi radicalmente. De hecho la versin Symfony 2 fue
liberada como un conjunto de componentes que pueden ser usados
por separado, de manera que proyectos como Drupal 8 integran ciertos
componentes de Symfony, y as lo hace Laravel.

Todo lo cual lleva el desarrollo de PHP a otro nivel, donde nosotros,


los programadores podemos aprovechar el trabajo de otros y fcilmente
poner parte de nuestro trabajo al alcance de otros, en vez de seguir
reinventando la rueda una y otra vez.

Pero volviendo a la instalacin de Laravel...

Una vez que se complete la descarga de los paquetes, verificamos


nuestro directorio, el cual debe lucir similar a ste:

..con todas las carpetas instaladas por Composer.


Y, como personas impacientes que somos, tambin iremos corriendo al
navegador, y tipearemos, en mi caso:
Cdigo :
http://localhost/laravelpruebas/public

Directorio pblico:

(Es importante acceder a la carpeta /public que es la puerta de nuestro


proyecto para la web, ms adelante veremos esto en detalle)
Y si todo ha salido bien:

Si leste you have arrived en tu navegador, ests listo para la tercera


parte, sino tienes varios das, los comentarios de abajo y Google para
investigar qu sali mal y prepararte para la siguiente entrega, donde
explicar lo que contienen las carpetas y archivos instalados por
Composer, entre otros temas.

Stay tuned
Curso profesional de PHP con Laravel - Abr. 10, 2014
2.3 - Primeros pasos con Laravel2 - Introduccin a Laravel

Escribe tus comentarios y aportes

luisakt
hace 2 meses, 1 semana
Una consulta amigos, por que cuando intento crear el proyecto me tira este error/
Al iniciar :
Failed loading C:/Program Files (x86)/Ampps\php-5.3\ioncube_loader_win_5.4.dll
Las ultimas lineas:
Generating autoload files
Failed loading C:/Program Files (x86)/Ampps\php-5.3\ioncube_loader_win_5.4.dll
Generating optimized class loader
Compiling common classes
Compiling views
Failed loading C:/Program Files (x86)/Ampps\php-5.3\ioncube_loader_win_5.4.dll
Failed loading C:/Program Files (x86)/Ampps\php-5.3\ioncube_loader_win_5.4.dll
Application key [cjY3JsD5NwV4sfMN1dyEHBNTtwir6EAd] set successfully.
Failed loading C:/Program Files (x86)/Ampps\php-5.3\ioncube_loader_win_5.4.dll
Despues el resto normal descarga e instala que puede faltar?

1 puntoResponder3 comentarios
crtferguson
hace 2 meses
Actualiza tu sistema operativo a Ubuntu xD

1 puntoResponder0 comentarios
ciberutilidades.tk
hace 1 mes, 2 semanas

Actualiza tu php a la ultima version.

1 puntoResponder0 comentarios
joozepp
hace 1 mes, 2 semanas
Si estas usando windows, te recomiendo descargues la versin actual de "Xampp", este
trae todo lo que necesitas para trabajar con Laravel.

1 puntoResponder0 comentarios

2 - Introduccin a Laravel
sileence Abr. 10, 2014Laravel

es uno de los frameworks ms fciles de


aprender para PHP, yo dira que tan fcil como Codeigniter. Sin embargo
en Laravel, fcil no quiere decir simple. Este potente framework combina
los features ms modernos de PHP para brindarnos una interfaz elegante
y hasta divertida de usar:
Quieren una ruta?
Cdigo :
// En app/routes.php:
Route::get(welcome, function() {
return Bienvenidos a Laravel;
});

Ahora quieren usar vistas con HTML?


Cdigo :
<!-- En app/views/welcome.blade.php: -->
<h1>Bienvenidos a Laravel</h1>

Quieren que la vista tenga un header y un footer? Laravel usa un


concepto ms potente llamado Layout. Cambiamos nuestra plantilla
welcome.blade.php a:
Cdigo :
@extends(layout)

@section(content)
<h1>Bienvenidos a Laravel</h1>
@stop

Y ahora creamos nuestro Layout


Cdigo :
<!-- En app/views/layout.blade.php -->
<!doctype html>
<html>
<head>
<title>Hacer vistas en Laravel es muy sencillo</title>
</head>
<body>
@yield(content)
</body>
</html>

Cuando usemos nuestra vista "welcome", Laravel cargar


automticamente la vista layout por nosotros, y reemplazar en la
plantilla layout la lnea @yield('content') por todo el HTML que hayamos
escrito en la plantilla welcome entre @section('content') y stop, quedando
el resultado as:
Cdigo :
<!doctype html>
<html>
<head>
<title>Hacer vistas en Laravel es muy sencillo</title>
</head>
<body>
<h1>Bienvenidos a Laravel</h1>
</body>
</html>

De esta forma tendremos 1 solo layout que usaremos en todas nuestras


vistas, evitando repetir el cdigo.
Ahora usar nuestras vistas es tan fcil como esto:
Cdigo :
Route::get(welcome, function() {
return View::make(welcome);
});

Y as en adelante Quieren hacer una redireccin?


Cdigo :
return Redirect::to(goodbye)

Generar una URL?


Cdigo :
URL::to(welcome)

Que tal si quisiramos pasar parmetros dinmicos a nuestra vista?


Tan fcil como esto:
Cdigo :
View::make(welcome)->with(name, Duilio);

Nuestra vista welcome.blade.php quedara de la siguiente manera:


Cdigo :
<h1>Bienvenido, {{ name }}</h1>

O as (si prefieren usar PHP directamente):


Cdigo :
<h1>Bienvenido, <?php echo $name ?></h1>

Caractersticas de la versin 4 de Laravel


Lo ms interesante de la versin 4 de Laravel es que detrs de toda esta
interfaz tan fcil de usar se esconde una arquitectura bastante slida
(SOLID).
Por ejemplo, los mtodos estticos que vimos hace poco no son ms que
una fachada (Facade). Por debajo se hace el llamado al contenedor de
Laravel, el cual maneja todas las dependencias entre las clases del
framework y de nuestra aplicacin.

Tanto si entendiste o no el ltimo prrafo, tanto si eres un entusiasta que


busca hacer sitios web de forma rpida y simple, o eres un experto que
busca crear una robusta aplicacin, fcil de mantener y probar: Laravel
es el framework para ti.
La idea de este set de tutoriales es ensearlos a usar Laravel desde lo
ms bsico (rutas, vistas, formularios, bases de datos) hasta lo ms
avanzado (inyeccin de dependencias, pruebas unitarias).

1.3 - Porqu elegir Laravel en vez de


Codeigniter
sileence Abr. 10, 2014Empezar

a programar con PHP nunca ha sido

sencillo. El sitio oficial tiene una documentacin muy completa de todas


las funcionalidades del lenguaje, sin embargo, no es un buen punto de
partida para aprender a hacer algo funcional, por ejemplo un mdulo
con PHP.

Empezando mi carrera autodidacta para ser desarrollador web, recuerdo


que imprim TODA la documentacin de PHP y la le completa durante
unas vacaciones.
Hice lo mismo con la documentacin de MySQL. Al final no saba hacer
NADA.
S me sirvi de referencia aprender qu hacan las funciones del

lenguaje, aunque hoy en da sigo consultando el sitio a menudo.


Entonces comenc a buscar tutoriales ms prcticos de PHP. Por
ejemplo las memorias de un aprendiz. Alguien lo recuerda?
Pero hoy en da si quieres trabajar con PHP adems tienes que:

Elegir el Framework adecuado


Esto quiere decir que tenga:
Un desarrollo activo: te garantiza correccin de problemas de
seguridad, mejoras, etc.
Una comunidad activa: la vas a necesitar cuando no sepas cmo hacer
algo.
Buena documentacin: puede ser el mejor framework del mundo pero
si nadie sabe cmo usarlo no sirve de nada.

Pero la mayora de los frameworks ya tienen


eso: Symfony, Codeigniter, Laravel, entre otros, entonces:

Cul framework elegir?


Hace unos aos atrs era una respuesta difcil, mi decisin estaba entre
Symfony y Codeigniter, a m me gustaba ms Symfony pero mi equipo de
trabajo prefera el segundo.
Symfony era y sigue siendo complejo, muy difcil de aprender, por otro

lado, CodeIgniter muy fcil de aprender porque es muy simple, carece de


muchas utilidades necesarias en un verdadero framework.
En Symfony 1.4 gastaba el 80% del tiempo investigando cmo hacer algo
y corrigiendo bugs y el 20% ejecutando, mientras que en CodeIgniter
solo 20% investigando pero 80% ejecutando.

De vuelta al 2013
Hoy en da Symfony 2 es el framework para PHP ms robusto que
existe, Fabien Potencier, su creador, es una mquina escribiendo
cdigo. Es increble tener en PHP componentes como el DOM
crawler (disponible tambin en Laravel) que te permite recorrer y
revisar desde PHP el cdigo HTML como lo haras conFirebug y eso se
lo debemos a Fabien.
Sin embargo, Symfony parece no estar escrito para seres humanos.
Slo algunos pocos privilegiados son capaces de aprovechar todo su
potencial.
Lo que hace que muchos se hayan ido a CodeIginter, pero

Porqu elegir Laravel en vez CodeIgniter


CodeIgniter no ofrece nada ms all de sencillez, despus de leerte su
documentacin en un da y tener que enfrentarte a las necesidades de un
proyecto real quedas en frente de una carpeta de modelos
vaca preguntndote Y ahora qu? Es all donde:
Si eres experto, instalas plugins o construyes un sub-framework encima

de CodeIgniter para suplir sus carencias.


Si eres principiante empiezas a lanzar un montn de lneas de cdigo en
un controlador.

Codeigniter miente y no tiene ORM propio


Slo tiene un constructor de queries que ellos dicen que es una versin
modificada del patrn de diseo Active Record pero eso es falso.
El patrn Active Record permite trabajar tus tablas como si fueran clases
y tus filas como objetos, con Laravel puedes (as como con Ruby on
Rails):
Cdigo :
$user = new User;
$user->name = Duilio;
$user->save(); // This is awesome

En Codeigniter sera esto:


Cdigo :
$this->db->insert(users, array(name => Duilio); // No active record
at all

PHP 5 en adelante est orientado a poner a disposicin de sus


programadores el potencial de la programacin orientada a objetos. Si

bien el enfoque de la base de datos de Codeigniter fue funcional en un


tiempo, ya qued en el pasado.
Laravel en constraste tiene un ORM llamado Eloquent y adems tiene un
constructor de queries llamado Fluent, ambos superan al Active
record del otro framework.

No incentiva al uso de plantillas en las vistas


En Codeiginiter:
Cdigo :
<ul>

<?php foreach ($addressbook as $name):?>

<li><?=$name?></li>

<?php endforeach; ?>

</ul>

Contrastado con Laravel:


Cdigo :
<ul>
@foreach ($addressbook as $name)

<li>{{ $name }}</li>

@endforeach

</ul>

La documentacin de CodeIgniter miente de nuevo al decir que los


pseudo-lenguajes de plantillas, como el sistema de plantillas Blade de
Laravel, son ms lentos en ejecutarse. Esto no es cierto porque todos al
final se compilan a cdigo PHP, y lo que se leer una y otra vez ser PHP
y no pseudo-lenguaje.
CodeIgniter ofrece un parser de plantillas muy simple, pero ste pierde
el concepto de un VERDADERO lenguaje de plantillas: convertir
etiquetas de <?=name?> a {{ name }} es slo la punta del iceberg.
Un verdadero lenguaje de plantillas debe tener herencia de plantillas
(layouts) y muchas otras caractersticas que Smarty, Twig poseen,
all Blade de Laravel no se queda muy atrs.

Super Controlador al rescate...


Como Codeigniter es tan bsico, muchos programadores terminan
escribiendo la mayor parte de la lgica de sus aplicaciones en un solo
lugar: el controlador.
Por ejemplo la clase de rutas es tan simple, que se queda corta en los

proyectos de la vida real y no queda ms que lidiar con los segmentos de


las URL desde el controlador, donde ya tu aplicacin debera saber qu
hacer.
Incluso en el mismo ncleo de Codeigniter, el controlador es una especie
de super clase que est a cargo de casi todo, como lo demuestra esta
imagen:

Al tratar de solucionar todos los problemas en una sola capa estars


escribiendo un cdigo difcil de leer y mantener y no estars
aprovechando las funcionalidades que un framework en el ao 2013
debe tener para ti.
Laravel tiene rutas, modelos, eventos, filtros, etc. que permiten que
tus controladores puedan verse as:
Cdigo :
public function edit($user)
{
return View::make('admin.users.form')->with('form', $form);
}

Puedes configurar una URL users/{id} para que Laravel consulte la BD


por ti, te traiga el usuario correspondiente a la ID o lance un 404 si no es
encontrado, todo eso antes de llegar al controlador.
En contraste con lo que sera Codeigniter:
Cdigo :
public function edit($id)
{
$user = $this->db->select('users', array('id' => $id));

if (is_null ($user)) $this->error404();

//etc...
}

Revisen la documentacin de Codeigniter vs la de Laravel en el tema


de rutas y comparen la diferencia.

Laravel es FCIL
Hace aos justificaba que la gente trabajara con Codeigniter, Symfony es
muy complejo y otras alternativas como CakePHP son inciertas.
Hoy en da en el mundo de PHP tenemos un framework que est bien
hecho, combina las mejores prcticas de desarrollo y hace que
nosotros, programadores de PHP podamos escribir un cdigo del cual
sentirnos orgullosos.

En tu primer proyecto con Laravel usars el 40% del tiempo para


documentarte, otro 40% para desarrollarlo y un 20% para
contemplar cun genial qued tu cdigo.
Saludos!

También podría gustarte