LARAVEL 5.1

@cesarlarsson

Mercado Framework

¿Que es Laravel?

@cesarlarsson

- Web Framework Open source sobre PHP

- MIT license

- Utiliza en patrón de diseño MVC

- Utiliza composer para instalar sus dependencias.

¿Por que Laravel?

@cesarlarsson

  1. Artisan
  2. Migration
  3. Eloquent 
  4. Inyección de dependencias
  5. Blade (Plantillas)

Requisitos

  • PHP >= 5.5.9
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension

@cesarlarsson

Requisitos Previos

  1. Conocer los que ofrece PHP en su version 5.5.9+ (Namespace)
  2. PSR-4
  3. COMPOSER
  4. VAGRANT - Homestead
  5. GLUP

@cesarlarsson

Composer

@cesarlarsson

¿Por que composer?

@cesarlarsson

  1. Tu tienes un proyecto que depende de un numero de librerías.
  2. Algunas de esas librerías de penden de otras librerías.
  3. Tu declaras las cosas de las cuales dependes.
  4. Composer busca las versiones de estos paquetes necesitas instalar, y las instala (las descarga en tu proyecto).

¿Que es composer?

@cesarlarsson

Manejador de Dependencias para PHP. Composer te permite declarar las librerías de las cuales tu proyecto depende o necesita. Con esto al ejecutar el fichero el las instalara automaticamente.

Equivalente de NPM o Bower para PHP :-)

Instalando composer

@cesarlarsson

curl -sS https://getcomposer.org/installer | php
php -r "readfile('https://getcomposer.org/installer');" | php

O

Corriendo Composer

1- Creamos nuestro archivo composer.json

{
 "name":"smartrabbit/comprimir_imagen",
 "type":"project",
 "author":[
 {
 "name":"cesar suarez",
 "email":"cesar@smartrabbit.co"
 
 }
 ],
 "require":{
 "php":">=5.3.2",
"nyholm/zebra-image": "1.0.0"
 },
 "autoload":{
 "psr-4":{
 
 }
 }
}

2- Nuestra librerias/clases la referenciamos dentro  en el autoload (Usando PSR-4)

{
 "name":"smartrabbit/comprimir_imagen",
 "type":"project",
 "author":[
 {
 "name":"cesar suarez",
 "email":"cesar@smartrabbit.co"
 
 }
 ],
 "require":{
 "php":">=5.3.2",
"nyholm/zebra-image": "1.0.0"
 },
 "autoload":{
 "psr-4":{
     "App\\":"clases/"
 }
 }
}

3- Ejecutamos en al consola

composer install

4- Para referenciar las autocargas ejecutamos en la consola

composer dumpautoload

VAGRANT

@cesarlarsson

¿Que es Vagrant?

Es una herramienta para desarrolladores que facilita la creación de entornos virtuales para desarrollo. En Vagrant podemos instalar y configurar software en una máquina virtual para que podamos simular que estamos en el servidor en el que se alojará la aplicación 

@cesarlarsson

¿Por que usar Vagrant?

  • Algo que te funciona a ti no le funciona a otros 
  • Alguien agregó una librería nueva o cambió la configuración de un software no lo documentó 
  • Otro software en la máquina de uno de los desarrolladores está provocando problemas en la instalación del proyecto 
  • Algo que funciona en local no funciona en remoto 
  • Entra un nuevo desarrollador en el proyecto y hay que perder un tiempo explicando cómo instalar el entorno

@cesarlarsson

Instalación de Vagrant

1- Instalar Virtual Box

2- Descargar e instalar Vagrant

3- Encontrar la caja deseada

https://geekytheory.com/tutorial-vagrant-1-que-es-y-como-usarlo/

@cesarlarsson

homestead

Box Oficial de Laravel para Vagrant

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres

@cesarlarsson

Nuevo elementos PHP

@cesarlarsson

Destacados (1/2)

  • Namespaces (desde las 5.3)
  • Se ha añadido soporte para traits.
  • Se ha añadido la sintaxis corta de array, e.g. $a = [1, 2, 3, 4]; o $a = ['uno' => 1, 'dos' => 2, 'tres' => 3, 'cuatro' => 4];.
  • Se ha añadido la derreferenciación de función de array, p.ej. foo()[0].
  • Los cierres ahora soportan $this.
  • <?= ahora está siempre disponible, sin tener en cuenta la opción de php.ini short_open_tag.

@cesarlarsson

Destacados (2/2)

  • Se ha añadido el acceso a miembro de clase en la instanciación, p.ej. (new Foo)->bar().
  • Ahora está soportada la sintaxis Clase::{expr}().
  • Se ha añadido el formato de número binario, p.ej. 0b001001101.
  • Se han mejorado los mensajes de error de análisis y las advertencias de argumentos incompatibes.
  • La extensión de sesiones ahora puede rastrear el progreso de subida de ficheros.
  • Desarrollo interno de servidor web en modo CLI.

@cesarlarsson

Namespaces (PHP 5.3)

  1. El conflicto de nombres entre el código que se crea y las clases/funciones/constantes internas de PHP o las clases/funciones/constantes de terceros.
  2. La capacidad de apodar (o abreviar) Nombres_Extra_Largos diseñada para aliviar el primer problema, mejorando la legibilidad del código fuente.

Los namespaces solucionan:

@cesarlarsson

Namespaces (PHP 5.3)

<?php
header('Content-type: text/plain');
require_once('spider.sample.php');
echo \Spider\Sample\MYCONST . PHP_EOL;
echo \Spider\Sample\MyFunction() . PHP_EOL;
echo \Spider\Sample\MyClass::WhoAmI() . PHP_EOL;
<?php  
// Código de la sección  Sample del proyecto Spider
namespace Spider\Sample;  
const MYCONST = 'Spider\Sample\MYCONST';  
function MyFunction() {  
    return __FUNCTION__;  
}  
class MyClass {  
    static function WhoAmI() {  
        return __METHOD__;  
    }  
}  

@cesarlarsson

Traits

Los traits (rasgos) son un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP. El objetivo de un trait es el de reducir las limitaciones propias de la herencia simple permitiendo que los desarrolladores reutilicen a voluntad conjuntos de métodos sobre varias clases independientes y pertenecientes a clases jerárquicas distintas

@cesarlarsson

Traits

class ClaseUno extends BaseUno
{
...
}
 
class ClaseDos extends BaseDos
{
...
}

Para usar una funcionalidad comun entre estas dos clases que extienden de dos clases diferentes usamos un Trait

@cesarlarsson

Traits

class ClaseUno extends BaseUno
{
    use feed;
}
 
class ClaseDos extends BaseDos
{
    use feed;
}
trait feed {
  private static $instance;
 
  public static function getFeed() {
    if ( is_null( self::$instance ) ) {
      self::$instance = new self();
    }
   
    return self::$instance;
  }
}

http://php.net/manual/es/language.oop5.traits.php

@cesarlarsson

Generadores

Los generadores proporcionan un modo fácil de implementar iteradores simples sin la sobrecarga o complejidad de implementar una clase que implemente la interfaz Iterator.

<?php
function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        // Observe que $i es preservado entre yields
        yield $i;
    }
}

$generator = gen_one_to_three();
foreach ($generator as $value) {
    echo "$value\n";
}
?>

@cesarlarsson

INSTALACION LARAVEL 5.1

Entorno

vagrant box add laravel/homestead

Clonamos Homestead (creamos una carpeta en el home para ello)

git clone https://github.com/laravel/homestead.git Homestead

Corremos los siguiente para crear el archivo de configuracion homestead.yaml

bash init.sh

Instalmos nuestra maquina virtual

homestead.yaml

Homestead edit

Homestead up

Homestead ssh

Homestead provision

Comandos Basicos

Usando Composer

1. De manera global

composer global require "laravel/installer=~1.1"
laravel new test

2. En el proyecto

composer create-project laravel/laravel --prefer-dist
composer create-project laravel/laravel spiderproject
composer create-project laravel/laravel spiderproject "~5.0.0" --prefer-dist

Elementos de Laravel

Artisan

Artisan es el nombre de la interfaz de comandos que tiene laravel. Esta provee un gran numero de comandos que ayudan en el proceso de desarrollo de nuestra aplicación.

 

Esta es impulsada por la consola de Symfony y para mirar los comando disponibles colocamos en nuestro proyecto:

php artisan list

Eloquent

El ORM llamado Eloquent incluido en Laravel prove una hermosa y sencilla implementación de ActiveRecord (registro activo) para trabajar con tu base de datos. Cada tabla de la base de datos tiene un "Modelo" correspondiente, el cual es utilizado para interactuar con esa tabla.

Blade

Blade is the simple, yet powerful templating engine provided with Laravel. Unlike other popular PHP templating engines, Blade does not restrict you from using plain PHP code in your views. All Blade views are compiled into plain PHP code and cached until they are modified, meaning Blade adds essentially zero overhead to your application. Blade view files use the.blade.php file extension and are typically stored in the resources/views directory.

Laravel provee un metodo simple para el llenado de las bases de datos para realizar pruebas. Las clases de poblado se almacenan en app/database/seeds. Las clases de poblado pueden tener el nombre que quieras, pero estaría bien seguir un convenio como UserTableSeeder, etc. Por defecto, ya hay definida una clase DatabaseSeeder. Desde esta clase, puedes utilizar el método call para ejecutar otras clases de poblado, permitiéndote así controlar el orden de poblado.

Seeders

HTTP Middleware

Los HTTP middleware proporcionan un mecanismo de filtrado de las solicitudes HTTP que entran a tu aplicación. Por ejemplo, Laravel incluye un middleware que verifica si un usuario esté autenticado. Si el usuario no está autenticado, el middleware lo redirige a la pantalla de login. Sin embargo, si el usuario está autenticado, el middleware permitirá que la solicitud acceda a la aplicación.

@cesarlarsson

http://laraveles.com/docs/5.1/middleware

Pasos

  1. Crear proyecto via homestead
  2. Creación base de datos (definir estructura)
  3. .env - archivo configuración
  4. Crear archivo de migración
  5. Crear modelos
  6. Crear Controladores
  7. Crear vistas
  8. Definir rutas

Estructura App

Estructura Http

Referencias

laravel.com

laraveles.com

laracasts.com

styde.net

bootswatch.com

LARAVEL 5.1

By César Eduardo Suárez