php

Cargar nuestras propias clases con Composer

Introducción

Al principio, no queremos utilizar Composer porque creemos que es muy complicado de utilizar. Hoy explicaré 2 cosas: cómo cargar nuestras clases y por qué es bueno utilizar Composer

¿Por qué es bueno?

Composer es un gestor de dependencias como lo es NPM. Ambos trabajan igual: leen un fichero, instalan y actualizan las dependencias. Fácil y sencillo. Por otro lado, Composer se encarga de cargar todas las clases necesarias.

Por ejemplo, si tenemos muchas librerías sería un lío hacer un include o require por cada una de éstas. ¿No sería mejor que alguien las cargara todas por nosotros? eso es justamente lo que hace el autoload de Composer.

Hasta aquí todo bien, todos lo entendemos. Lo que se me hace un poco complicado es cómo cargar nuestras propias clases. Es decir, está muy bien eso de que se carguen las clases que otros desarrolladores hicieron, ¿pero cómo añado la lógica de mi aplicación? eso se responde en el siguiente apartado

¿Cómo cargar nuestro propio código?

Esto es muy fácil, simplemente tenemos que indicarle a Composer en dónde reside nuestro código que queremos que se autocargue. Tenemos que modificar el archivo composer.json. Dicho fichero se verá más o menos así:

{
    "name": "parzibyte/la-biblioteca",
    "description": "API para biblioteca",
    "type": "project",
    "require": {
        "phroute/phroute": "^2.1"
    },
    "authors": [
        {
            "name": "Luis Cabrera Benito",
            "email": "contacto@parzibyte.me"
        }
    ]
}

En este caso es de un proyecto que estoy haciendo, pero dejemos eso a un lado. Independientemente de lo que tengamos, vamos a añadir lo siguiente:

"autoload": {
        "psr-4": {
            "Namespace\\": "carpeta/"
        }
    }

Para que finalmente, el archivo (al menos en mi caso) luzca así:

{
    "name": "parzibyte/la-biblioteca",
    "description": "API para biblioteca",
    "type": "project",
    "require": {
        "phroute/phroute": "^2.1"
    },
    "authors": [
        {
            "name": "Luis Cabrera Benito",
            "email": "contacto@parzibyte.me"
        }
    ],
    "autoload": {
        "psr-4": {
            "Biblioteca\\": "app/"
        }
    }
}

Como se puede observar, el namespace en mi caso es Biblioteca. Es necesario añadir las dos diagonales \\.

Y en carpeta he puesto “app/” porque así se llama el folder en donde tengo todo mi código. Se ve así:

De esta forma, el archivo composer.json buscará todo lo que haya dentro de la carpeta app. Y dentro de la carpeta tengo otras dos carpetas. El código de un controlador, por ejemplo, luce así:

<?php

namespace Biblioteca\Controllers;
use PDO;
use Exception;
use Biblioteca\Services\DatabaseService;
use Biblioteca\Services\SessionService;

class LibrosController {
/*Magia aquí*/}

Lo copié de esta manera porque quiero que se note que podemos utilizar nuestras otras clases (por ejemplo, tengo una clase llamada DatabaseService) simplemente utilizando use namespace\clase.

Por otro lado, estoy utilizando PDO. Si necesitamos utilizar una clase que ya viene incluida por defecto en PHP tenemos que indicarlo; si no, avisará que no encuentra la clase en nuestro namespace.

Finalmente dejo aquí el código de ejemplo de cómo se ve DatabaseService.

<?php

namespace Biblioteca\Services;

use PDO;

class DatabaseService
{
    /*Magia aquí*/}

Recargar autoload

Después de modificar el archivo composer.json debemos generar el autoload de nuevo. Para ello ve a la ubicación en donde esté el archivo a través de la terminal y ejecuta:

composer install

Conclusión

Si seguimos todo esto, podremos estructurar nuestro código de una manera eficaz, y será cargado / incluido automáticamente. Más tarde podemos agregar más archivos a la carpeta que indicamos y todo se seguirá cargando siempre y cuando respetemos los namespaces.

En los ejemplos el namespace es “Biblioteca” pero puede ser el que se te ocurra, aunque debería llamarse de alguna forma referente a tu proyecto.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.