¿Cómo añado mis propias clases a un proyecto de Laravel?

Creando clases y carpetas dentro de app

En Laravel 5, todo el contenido de la carpeta app se carga de forma automática usando PSR-4.

Esto lo podemos ver en el archivo composer.json:

"psr-4": {
    "App\\": "app/"
}

Esto significa que podemos crear nuestras clases dentro de app, y éstas serán reconocidas inmediatamente (incluso si no se trata de un modelo, controlador, middleware, evento, etcétera).

Por ejemplo, puedo crear un archivo en la siguiente dirección:

app/Custom/MyClass.php

Sólo debo asegurarme de usar el namespace adecuado dentro de MyClass.php:

<?php namespace App\Custom;

class MyClass 
{
    /* métodos y/o atributos */
}

Y eso es todo. Ahora puedo usar esta clase desde cualquier contexto.

Por ejemplo, si lo quiero usar desde un controlador, entonces en la parte superior añadiría:

use App\Custom\MyClass;

A tener en cuenta:

  • Hay muchas formas de organizar nuestro código.
  • Distintas estructuras de carpetas que podemos seguir.
  • Y ello va a depender mucho de la magnitud del proyecto, ya que Laravel es flexible en ese sentido, y podemos organizarnos como mejor nos parezca.

Creando carpetas al mismo nivel que app

Por cierto: no estamos limitados a la carpeta app.

Es decir, podemos tener muchas carpetas aquí, en distintos niveles. Pero si de pronto nuestra aplicación crece mucho y queremos organizar todo en base a módulos (u otro enfoque), podemos crear carpetas al mismo nivel que la carpeta app.

Para ello hemos de aplicar PSR-4 a estas nuevas carpetas. Por ejemplo:

"psr-4": {
    "App\\": "app/",
    "Blog\\": "blog/",
    "Dashboard\\": "dashboard/"
}

Y así dentro de blog y dashboard podríamos tener carpetas para nuestros modelos, servicios, interfaces, etcétera.

En este último caso, será necesario ejecutar composer dump-autoload.

Ejemplo breve

  1. He creado una carpeta tawa en el directorio raíz de mi proyecto (nombre de la aplicación que estoy desarrollando, únicamente a modo de ejemplo; podría ser el nombre de un módulo). Carpeta creada en la raíz del proyecto
  2. Agregué una carpeta Services en su interior, y a su vez un archivo CvHandler.php al interior de esta carpeta.
  3. Modifiqué el archivo composer.json:
    "psr-4": {
        "App\\": "app/",
        "Tawa\\": "tawa/"
    }
  4. Definí la clase CvHandler del siguiente modo:

    <?php namespace Tawa\Services;
    
    class CvHandler
    {
        public function sayHello()
        {
            return 'hi';
        }
    }
  5. Ejecuté composer dump-autoload.
  6. Finalmente ingresé a la consola interactiva Tinker (ejecutando php artisan tinker), para verificar que funcione la nueva clase. Verificando el funcionamiento de la clase en Tinker

Este paso 6 demuestra que lo que hicimos es factible, y nuestras clases estarán disponibles en nuestro proyecto siempre que usemos el namespace adecuado.

psr 4 laravel

Cursos recomendados

Card image cap

Aprende Laravel

Aprende Laravel 5.5 desde cero y desarrolla aplicaciones web reales, en tiempo récord, de la mano de Laravel.

Ver más
Card image cap

Aprende Javascript

Domina JS con este curso práctico y completo! Fundamentos, ejemplos reales, ES6+, POO, Ajax, Webpack, NPM y más.

Ver más

¿Tienes alguna duda?

Si algo no te quedó claro o tienes alguna sugerencia, escribe un comentario aquí debajo.

Además recuerda compartir el post si te resultó de ayuda. ¡Gracias!

Antes que te vayas

Inscríbete en nuestro curso gratuito de Laravel