Blog de programación, errores, soluciones

Autoload Composer

Composer nos brinda un montón de ventajas para manipular archivos y dependencias en nuestro proyecto PHP. Si alguna ves has visto por ejemplo el plugin laravel te preguntaras como funciona el use que tanto se usa en un proyecto.

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.

  • pshop
    • 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

php composer.phar install

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

composer init

En mi caso correre 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:

"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.

"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

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.

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:

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.

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.

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

Referencia

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

Ayudame: Por favor deja un comentario antes de irte, tu opinión es bienvenida. Si te gusta el contenido comparte.
Languages
Last 4 post in same category