Laravel es el framework PHP más popular del momento, es de código abierto y se utiliza para desarrollar aplicaciones y servicios web con PHP 5, por eso aunque tenía pensado empezar con Symfony por que había trabajado más con él me he decantado por Laravel.

Una simple comparativa en Google Trends con algunos frameworks PHP nos servirá para hacernos una idea, sin profundizar más, del alcance de Laravel frente a Symfony, CakePHP, Zend Framework, CodeIgniter y otros, en este link tienes la comparativa que se muestra a continuación en la imagen,por si quieres añadir o quitar algún framework:

Comparativa de frameworks PHP - Laravel Symfony CakePHP ZendFramework CodeIgniter

Comparativa de frameworks PHP – Laravel Symfony CakePHP ZendFramework CodeIgniter

Como es habitual en mis tutoriales aprenderemos Laravel desarrollando un proyecto, este incluirá 8 tablas de la base datos del proyecto Learning Project.

Desarrollaremos dos tutoriales separados, que serán una aplicación web donde usaremos Bootstrap para ayudarnos en la presentación y una API RESTFul ambas tendrán en común el modelo de datos y desarrollarán completando todas las necesidades para las 8 tablas y sus relaciones.

En este primer capítulo, veremos como instalar Laravel, lo configuraremos en un servidor Apache y explicaremos el proyecto a desarrollar tanto en una API RESTFul como en una aplicación web.

Laravel Tutorial: Estos son los pasos que seguiremos:

  1. INSTALACIÓN DE LARAVEL
  2. CONFIGURANDO LARAVEL EN APACHE
  3. EL PROYECTO
  4. TUTORIAL: APLICACIÓN WEB CON LARAVEL
  5. TUTORIAL: API RESTFul CON LARAVEL
  6. DOCUMENTACIÓN

Software utilizado

  • Laravel 5: framework PHP de código abierto que utilizamos en el proyecto.
  • PHP 5: lenguaje de programación del lado del servidor que vamos a utilizar.
  • Apache 2:el proyecto Apache HTTP Server es un esfuerzo por desarrollar y mantener un servidor HTTP de código abierto para sistemas operativos modernos, incluyendo UNIX y Windows.
  • Atom: editor de texto con múltiples plugins y soporte para muchos lenguages como PHP.
  • Ubuntu: en mi caso uso Linux en particular Ubuntu para los desarrollos.
  • MySQL: base de datos que utilizamos en el desarrollo de este proyecto.

1. INSTALACIÓN Y PUESTA EN MARCHA DE LARAVEL

Para la instalación de Laravel tenemos unos requisitos previos:

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

Instalación de Laravel

Necesitaremos tener instalado Composer que es un gestor de paquetes y dependencias para PHP y es el que utiliza Laravel. Composer te permite declarar las librerías de las que depende el proyecto y este las majerá por ti para su instalación o actualización.

En mi caso, que estoy en Linux (Ubuntu) para instalarlo simplemente ejecutamos:

sudo apt-get install composer

La instalación en otros sistemas operativos la puedes encontrar en la propia web de Composer : Composer – Getting Started.

Una vez instalado ya podemos ejecutar la instalación de Laravel vía Composer con el comando:

composer global require laravel/installer


Creación de un proyecto con Laravel

Una vez hecho esto ya podemos ejecutar directamente:

laravel new nombre-del-proyecto

Así, en nuestro caso simplemente ejecutamos laravel new CustomerdbLaravel:

Otra opción es usar composer así:

composer create-project --prefer-dist laravel/laravel CustomerdbLaravel

Estructura del proyecto con Laravel

Vamos a comentar los principales directorios de la estructura de Laravel, para ello me he ayudado de la documentación de la estructura en español de Laravel, donde puedes encontrar información más detallada:

  • app: contiene los modelos, y el código base de nuestra aplicación, incluirá los directorios Console, Http y Providers.
  • resources/views: contiene las vistas, donde usaremos el motor de plantillas Blade.
  • app/Http/Controllers: aquí será donde se definirán los controladores.
  • app/Http/routes.php: para la definición de las rutas.
  • app/config/app.php: contiene configuración general de la aplicación.
  • public: carpeta pública desde dónde se inicia el proceso de ejecución de una aplicación Laravel.

En el desarrollo de la aplicación iremos comentando más cosas sobre la estructura según vayamos utilizando diferentes elementos del framework.

2. CONFIGURANDO LARAVEL EN APACHE

Damos por supuesto que tenemos instalado un servidor Apache y configurado ya con PHP 5, sino es así, sigue los pasos de mi guía para la Instalación LAMP (Linux + Apache + MySQL + PHP) en Ubuntu 15.10, si utilizas una instalación XAMP o MAMP, ten en cuenta los requisitos que fijamos al principio para instalar Laravel.

Instalación LAMP en Ubuntu 15.10

Instalación LAMP en Ubuntu 15.10

Requisitos PHP

Una vez llegamos a este punto necesitamos instalar la librería php5-mcrypt ya que la utiliza Laravel:

sudo apt-get install php5-mcrypt

Comprobamos su activación simplemente con esta instrucción /usr/bin/env php –ri mcrypt, sino está vamos a php.ini en /etc/php5/cli (Ubuntu), e incluimos la línea:

extension=mcrypt.so

Para que los cambios tengan efecto reiniciamos el servidor Apache:

sudo service apache2 restart

Creamos un host virtual en Apache

Creamos un host virtual para nuestra aplicación en el fichero customerapp.conf accediendo a la carpeta:

cd /etc/apache2/sites-available/

Editamos el fichero con el editor que prefieras por ejemplo con gedit:

sudo gedit customerapp.conf

Y configuramos el Virtual Host con la información de tu proyecto:

<VirtualHost *:80>
  ServerName customerapp.localhost.com
  DocumentRoot "/home/xules/xulpro/LaravelProjects/CustomerdbLaravel/public"
  <Directory "/home/xules/xulpro/LaravelProjects/CustomerdbLaravel/public">
    DirectoryIndex index.php
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

Creamos un enlace simbólico en la carpeta sites-enabled de la siguiente forma:

cd ../sites-enabled/

sudo ln -s ../sites-available/customerapp.conf

Añadimos en /etc/hosts el nombre que hemos definido para nuestro proyecto en mi caso customerapp.localhost.com:

127.0.0.1     customerapp.localhost.com

Por defecto, apache estará configurado para funcionar con el grupo www-data sino lo hemos hecho ya debemos añadir nuestro usuario al grupo, en mi caso xules:

sudo adduser xules  www-data

Obteniendo como respuesta:

Añadiendo al usuario `xules' al grupo `www-data' ...
Añadiendo al usuario xules al grupo www-data
Hecho.

Una vez finalizada la configuración necesitamos habilitar la configuración de las diferentes rutas con:

sudo a2enmod rewrite

Por último, tal y como se indica en la configuración de Laravel necesitamos dar permisos de escritura a la carpeta storage y a su contenido, ya que es ahí donde se accede a la escritura de los logs, simplemente dentro de nuestro proyecto ejecutamos:

sudo chmod -R 777 storage

Con esto ya tendremos asegurado el acceso a las rutas que creemos en nuestro proyecto, ahora si escribes en tu navegador: http://customerapp.localhost.com/ debería aparecer la siguiente pantalla:

Laravel - Funcionando en Apache

Laravel – Funcionando en Apache

3. EL PROYECTO:

Learning Project es un proyecto base que utilizo para mis tutoriales en diferentes lenguajes de programación, bases de datos y frameworks, en los tutoriales que vamos a desarrollar con Laravel usaremos la base de datos MySQL tanto para la aplicación web como para la API RESTFul.

Definición del proyecto

Es un proyecto que se define como multiempresa para la administración de clientes, almacenaremos la información de clientes y empresas, cada empresa podrá tener múltiples clientes, para este desarrollo se plantea que la entidad de los clientes tenga direcciones que podrá ser una o varias, empresas y clientes compartirán los campos definidos en tablas para países, idiomas, monedas y formas de pago.

Basándonos en el planteamiento Learning Project (consúltalo si necesitas más detalles del proyecto), te diré que se desarrolla con una base de datos propia y que todo el desarrollo se hará desde cero, con la ayuda y documentación que se nos facilita desde Laravel y las diferentes utilidades que vayamos necesitando.

Esquema SQL

Desarrollamos las siguientes tablas, aunque su nombre ya explica su utilidad, vamos a explicar su función y algunas características básicas, el resto irá directamente sobre el código SQL, como puedes ver aquí con más detalle, estas son las tablas que utilizaremos ya que tienes el desarrollo completo de la base de datos en el Tutorial MySQL (MariaDB) explicado paso a paso, ahora las tablas:

Learning Project
TABLA
DESCRIPCIÓN
CARACTERÍSTICAS DE DISEÑO
cb_enterprise
Empresas de la aplicación, cada empresa tendrá sus clientes.
Las empresas tendrán definido inicialmente: idioma, país y moneda, así como otros campos básicos propios.
cb_customer
Tabla general de cliente, donde se almacenarán los clientes de las diferentes empresas.
Tendrán definido inicialmente: idioma, país, direcciones, empresas, métodos de pago y moneda, así como otros campos básicos propios.
cb_addresses
Tabla de registro de las direcciones, se asocian aquí las direcciones que tienen un cliente.
Registro para asociar las direcciones al cliente, cada cliente tendrá un número ilimitado de direcciones con cb_address relacionado mediante cb_addresses (es básicamente una tabla relacional)
cb_address
Tabla de dirección donde se guardan los datos de la dirección en sí.
Tabla de dirección que tendrá los campos generales de una dirección, así como números de teléfono, transportista y tipos de dirección.
cb_language
Tabla con los idiomas registrados en la aplicación, se podrá relacionar con múltiples tablas.
cb_currency
Tabla con las monedas registradas en la aplicación, se podrá relacionar con múltiples tablas.
cb_country
Tabla con los países registrados en la aplicación, se podrá relacionar con múltiples tablas.
Para cada país se especificará la moneda y el idioma utilizado por defecto.
cb_paymentmethod
Métodos de pago definidos para el cliente u otras entidades.

A continuación, una imagen con el el Esquema E-R de Customerdb donde se muestran las relaciones reales de la base de datos, con los nombres de las claves foráneas, …

Learning Project Customerdb Database Entity Relation

Esquema E-R de Customerdb propuesto en Learning Project

El desarrollo de esta base de datos que utilizo en mi proyecto Learning Project lo puedes ver con más detalle en el desarrollo del proyecto con MySQL (MariaDB), aquí explico el lenguaje SQL para su creación, por si quieres verla por ti mismo este es el código SQL la base de datos MySQL para la base de datos customerdb:

Para centrarnos en el desarrollo PHP con Laravel tienes aquí otro script para la poblar con datos la base de datos customerdb:

4. TUTORIAL: APLICACIÓN WEB CON LARAVEL

Para entender el funcionamiento de Laravel para el desarrollo de aplicaciones web realizaremos una aplicación CRUD (Create Read Update Delete) para la base de datos customerdb donde aprenderemos a crear los modelos, los controladores, los ficheros para las migrations, también, vamos a darle a nuestra aplicación las siguientes características:

  • Seguridad: añadiremos control acceso.
  • Multiidioma: nuestra aplicación debe soportar varios idiomas.
  • Look & Fell Web UI: veremos como podemos modificar la presentación web de nuestro proyecto, para ello utilizaremos desde el principio Bootstrap.
  • Plantillas: veremos como utilizar plantillas (templates) en nuestro desarrollo, en este caso Blade el motor de plantillas que trae incorporado Laravel.
  • Otras necesidades: según vayamos avanzando con el proyecto iremos profundizando en otras características.

El resultado que veremos en nuestra aplicación será el siguiente:

Aplicacion Web con Laravel

Aplicacion Web con Laravel

Ya está aquí el primer capítulo:

Laravel - Primeros pasos en la creación de una aplicación con Laravel

Laravel – Primeros pasos en la creación de una aplicación con Laravel

5. TUTORIAL: API RESTFul CON LARAVEL

Una buena forma para aprender a desarrollar una aplicación RESTFul es utilizar Laravel, ya que con las utilidades que nos proporciona facilita su aprendizaje, para ello al igual que en el tutorial de la aplicación web implementaremos una api RESTFul para el proyecto que se describe en Learning Project con una base de datos MySQL, donde implementaremos una API RestFul completa desarrollando CRUD para todas las entidades.

No realizamos el desarrollo de la parte cliente sino que utilizaremos Postman que es una aplicación disponible en el Chrome Store para probar de forma muy sencilla y rápida tus aplicaciones. En la imagen se puede ver un ejemplo de los datos devueltos al consultar las monedas:

Aplicación RESTFul con Laravel

Aplicación RESTFul con Laravel

 

6. DOCUMENTACIÓN