Chose Language:
Author: Admin/Publisher |finished | checked

Autoload Composer

Composer nos brinda un montón de ventajas para manipular archivos y dependencias en nuestro proyecto PHP. Si alguna vez has visto por ejemplo el framework Laravel, te preguntarás como funciona el término use que tanto se usa en un proyecto creado con este.

Autoload nos permite cargar nuestras clases de forma que no tenemos que hacer include de la clase cada vez que la vamos a usar.

Ralizemos un ejemplo de Autoload con composer y en paralelo las mismas clases pero sin aplicar el auto load.

Para ello crearé un directorio con 2 carpetas en 1 cargaré todas las clases con autoload y a la otra no se le aplicará nada. La estructura de mi directorio será la siguiente.

  • exrphp
    • clases
    • aclases

una vez creado mi directorio del proyecto debere usar composer en mi proyecto esto lo puedo hacer creando el composer.json y correr

console
php composer.phar install

o correr composer init, si tenemos installado composer globalmente lo puede correr con el siguiente comando.

Terminal/console
composer init

En mi caso correré init

Como pude ver al correr composer init nos irá guiando para correr un composer.json y como paso final lo instalara.

Ahora si lo desea, antes de seguir vea php namespaces. Si lo recuerda bien, aunque usáramos use debíamos importar la clase que estábamos usando.

Hagamos que la carpeta aclases use composer autoload use mientras que clases no lo use.

Lo haremos con psr-4, ya que es el más simple:

composer.json
"autoload": {
    "psr-4": {"ALoad\\": "aclases/"}
}

ALoad – seria el namespace que usare en la carpeta aclase, podemos definir varios namespaces y carpetas para que sean usados.

composer.json
"autoload": {
    "psr-4": {
        "ALoad\\": "aclases/",
        "Namespace2\\": "carpeta2",
        "Namespace3\\": "carpeta3"
    }
}

Como puede ver en la siguiente imagen he creado un index.php y he implementado clases una que posee autoload y otra que no

exrphp/index.php
autoload_composer_index_example

Por lo general en proyectos con algún framework se usa él, autoload, y se llama al archivo autoload.php que está en vendor, de hecho es este archivo.

Los framework usan el archivo index.php llamando a autoload.php.

index.php
require __DIR__ . '/vendor/autoload.php';

De esta manera se incluyen todas las clases que utilizara el framework, las cuales pueden ser cientas o incluso más. En la mayoría de los frameworks aunque usted no lo crea estamos en un index.php el cual está oculto de su vista.

Este index.php llama a un controlador y el controllador probablemente llame a una vista la cual será renderizada en pantalla. Esta modalidad de usar el index.php no solo pasa en frameworks también hay CMS que la usan.

Algo que se me pasaba por alto es la forma de rehacer el archivo autoload.php para ello use:

Terminal/console
composer dump-autoload

Bien ahora es probable que se este preguntando pero entonces como sabe la clase que usa una dependencia de terceros yo nunca realizo un include o require de la carpeta. Veamos un ejemplo con la Carbon una extencion para manejar fechas.

Terminal/console
composer require nesbot/carbon

Como cualquier instalación de una dependencia con composer. Ahora su uso

use Carbon\Carbon;

Bien y mi proyecto como sabe de ese namespace y clase?, bueno para saber es debemos ir a la carpeta vender/nesbot/carbon ahi encontrara un composer.json al abrirlo nos encontraremos con lo siguiente.

nesbot/carbon/composer.json

Como se dará cuenta carbon ya viene con un autoload especificado.

Referencia

https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup

Category: otros
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category