This project is created to go step by step understanding the basic operation of laravel.
-
Definir la estructura de directorios
- src/
- tests/
-
Inicializar el proyecto con composer para crear composer.json $ php composer.phar init $ cd learningLaravel $ php composer.phar init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (/) [Asus/learning-laravel]: alexmbello1984/learning-laravel Description []: This project is created to go step by step understanding the basic operation of laravel Author [alexmbello alexmbello@gmail.com]: alexmbello alexmbello1984@gmail.com Minimum Stability []: stable Package Type []: project License []: MIT
Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? no Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{ "name": "alexmbello1984/learning-laravel", "description": "This project is created to go step by step understanding the basic operation of laravel", "type": "project", "license": "MIT", "authors": [ { "name": "alexmbello", "email": "alexmbello1984@gmail.com" } ], "minimum- ": "stable", "require": {} }
Do you confirm generation [yes]? yes Would you like the vendor directory added to your .gitignore [yes]? no
-
configurando el Autoload de las clases con PSR-4 Se configura el composer.json para usar el autoload PSR-4 "require": {}, "autoload": { "psr-4": { "PlatziPHP\": "src/" } }
Se ejecuta $ php composer.phar install que generará el archivo de autoload "Generating autoload files" y que para usar habrá que incluir asi:
require_once DIR . './vendor/autoload.php'; $user = new \PlatziPHP\User();
Si se quiere evitar tener que usar tanto el namespace en la instanciacion de la clase se le indica a php que en ese contexto se va a usar User del namespace \PlatziPHP\User
require_once DIR . './vendor/autoload.php'; use \PlatziPHP\User; $user = new User();
o con un alias
require_once DIR . './vendor/autoload.php'; use \PlatziPHP\User as User; $user = new User();
y que generará una instancia asi vista en un var_dump: object(PlatziPHP\User)[2] public 'id' => string '' (length=0)
-
Configuracion de Pruebas unitarias con phunit agregar la dependencia al composer.json en las dependencias de desarrollo, NO en las de produccion.
$ php composer.phar require phpunit/phpunit --dev esto agregará la dependecia de phpunit al composer json y descargará el componente phpunit/phpunit
Se escribe la clase y el caso de prueba de la clase y se ejecuta con el comando: $ php ./vendor/phpunit/phpunit/phpunit tests
la funcion de prueba podria llamarse testX y seria reconocida por phpunit como un caso de prueba, o podria llamarse X y para que phpunit lo reconozca como una prueba a ejecutar debe tener la anotacion /** @test */
$ php ./vendor/phpunit/phpunit/phpunit tests PHPUnit 4.8.21 by Sebastian Bergmann and contributors. Time: 1.13 seconds, Memory: 5.00Mb OK (2 tests, 2 assertions) 4.1 Se escriben los modelos Autor y sus casos de prueba, el modelo Post y sus casos de prueba.
-
Creando el objeto de valor Email ya no es del patron Entidad sino que la identidad la da el valor que tiene, hasta aqui tenemos:
- Objetos: los objetos tienen un estado, mensajes(definen el comportamiento)
- Mensajes: comportamiento, funciones
- Colaboracion: hay colaboracion entre objetos como entre el Post y el Autor del post, el post internamente usaba el autor en colaboración
- Herencia: El Autor es hijo de Usuario
- Responsabilidad: el objeto a traves de su comportamiento define para si una unica responsabilidad
- Composer:
- Dependencias: instalacion y actualizacion de dependencias componentes
- Autoloading: usamos un estandar de autoloading el PSR-4
- Testing: cumpliendo los tres pasos de testing: 1- preparar el entorno, 2- ejecutar y 3- Comprobar
- Definicion: es preparar el entorno, crear los objetos necesarios, etc
- Comprobacion: Ejecutar la accion a validar, llamar el mensaje
- Mantenimiento: algunas veces tenemos que cambiar los tests ya que las clases pueden ir cambiando
- Entidades: Patron de diseño en el que se modelan las clases son parte del problema que estamos solucionando
- Identidad: tienen identidad independiente de su estado
- Modelo del Problema: hacen parte del modelo del problema
- Objetos de valor: es otro patron de diseño son objetos que no son Entidades, son objetos que quizas antes eran tipos basicos y no tenian tanta importancia antes a la hora de hablar del problema como las entidades pero son cosas necesarias de modelar para el proyecto.
- id <=> estado: la identidad la da el estado, si cambia el valor el objeto estara representando otra entidad ejemplo el Email
- inmutables: No cambian su valor, cuando es necesario se crean nuevos objetos.
Implementar PHP en la web, Arquitectura de la web como se comunican cliente y servidor, patron modelo vista controlador y el patron collections(fuera del contexto web)
- Modelo vista Controlador Se escribira el controlador que mediará entre un request, el que sabe que hacer(dominio) y quien sabe como mostrar el resultado(vista)
instalamos Ulliminate/Http con el comando $ php composer.phar require Illuminate/Http para utilizar Request y Response
Creamos carpeta Http para crear todos los objetos de la web y separar a traves de un namespace distinto para las cosas de la web separadas en el namespace de Dominio.
6.1 Se crea un controlador HomeController y se verifica que funcione, se crea el request y se pasa el request al controlador, y se imprime un valor del request.