> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Estructura de directorios

> Explicamos el papel de los principales directorios y archivos de un proyecto Laravel.

## Introducción

La estructura por defecto de una aplicación Laravel ofrece un buen punto de partida tanto para aplicaciones grandes como pequeñas.
Sin embargo, eres libre de organizar tu aplicación como quieras.
Laravel apenas impone restricciones sobre dónde ubicar las clases, siempre que Composer pueda cargarlas automáticamente.

## Directorio raíz

Al crear un proyecto Laravel nuevo se genera una estructura como la siguiente.

```
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json
```

### Directorio `app/`

Contiene el código principal de la aplicación.
Casi todas las clases (controladores, modelos, middlewares, etc.) se colocan aquí.

Por defecto incluye los subdirectorios `Http`, `Models` y `Providers`.
Al generar clases con comandos Artisan, también se crean automáticamente otros subdirectorios.

### Directorio `bootstrap/`

Contiene el archivo `app.php` que arranca el framework.
También contiene el subdirectorio `cache/`, que guarda archivos de optimización de rendimiento como la caché de rutas o la de servicios.

### Directorio `config/`

Almacena todos los archivos de configuración de la aplicación.
Es recomendable leer estos archivos para conocer las opciones disponibles.

### Directorio `database/`

Almacena las migraciones, las model factories y los seeders de la base de datos.
También puedes ubicar aquí el archivo de base de datos SQLite.

### Directorio `public/`

Contiene `index.php`, el punto de entrada de todas las solicitudes a la aplicación.
Aquí también se almacenan los assets como imágenes, JavaScript o CSS.

<Warning>
  Configura el document root del servidor web apuntando al directorio `public/` del proyecto Laravel.
  Publicar directamente la raíz del proyecto o un subdirectorio expone archivos sensibles.
</Warning>

### Directorio `resources/`

Contiene las [vistas](/es/views) y los assets sin compilar (CSS, JavaScript, etc.).

### Directorio `routes/`

Contiene todas las definiciones de rutas de la aplicación.
Por defecto se incluyen dos archivos de rutas: `web.php` y `console.php`.

| Archivo        | Uso                                                                                                                                |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `web.php`      | Rutas dirigidas al navegador. Se les aplica el grupo de middleware `web`, que aporta sesión, protección CSRF y cifrado de cookies. |
| `console.php`  | Archivo para definir comandos Artisan mediante closures.                                                                           |
| `api.php`      | Rutas de API sin estado. Se añade con el comando `install:api`.                                                                    |
| `channels.php` | Archivo para registrar los canales de broadcasting de eventos.                                                                     |

### Directorio `storage/`

Almacena archivos generados por el framework: logs, plantillas Blade compiladas, sesiones basadas en archivos, caché de archivos, etc.
Se divide en tres subdirectorios: `app/`, `framework/` y `logs/`.

### Directorio `tests/`

Contiene las pruebas automatizadas.
Incluye ejemplos de pruebas unitarias y de funcionalidad usando [Pest](https://pestphp.com) o [PHPUnit](https://phpunit.de/).

### Directorio `vendor/`

Contiene las dependencias de [Composer](https://getcomposer.org). No lo confirmes en el control de versiones.

## Detalles del directorio `app/`

Muchas clases del directorio `app` pueden generarse con comandos Artisan.
Para ver los comandos disponibles ejecuta:

```shell theme={null}
php artisan list make
```

<AccordionGroup>
  <Accordion title="Directorio Http/">
    Contiene controladores, middlewares y form requests.
    Casi toda la lógica de procesamiento de las solicitudes se ubica aquí.
  </Accordion>

  <Accordion title="Directorio Models/">
    Contiene todas las clases de [modelos Eloquent](/es/eloquent).
    Existe un "modelo" por cada tabla de la base de datos, que se utiliza para consultar e insertar datos.
  </Accordion>

  <Accordion title="Directorio Providers/">
    Contiene todos los [service providers](/es/service-providers) de la aplicación.
    Los service providers registran servicios en el contenedor, registran eventos y realizan las tareas necesarias para arrancar la aplicación.
  </Accordion>

  <Accordion title="Directorio Console/">
    Contiene todos los comandos Artisan personalizados.
    Se generan con el comando `make:command`.
  </Accordion>

  <Accordion title="Directorio Exceptions/">
    Contiene todas las excepciones personalizadas de la aplicación.
    Se generan con el comando `make:exception`.
  </Accordion>
</AccordionGroup>

## Archivos importantes

### Archivo `.env`

Gestiona los valores de configuración que varían por entorno (credenciales de base de datos, claves de API, etc.).
Se accede a ellos a través del helper `env()` desde los archivos de configuración de `config/`.

```ini theme={null}
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite
```

### Archivo `artisan`

Es el punto de entrada de la interfaz de línea de comandos Artisan.
Se ejecuta con el formato `php artisan <nombre_del_comando>`.

## Próximos pasos

<Card title="Enrutamiento" icon="route" href="/es/routing">
  Aprende a definir rutas y a asociar URLs con la lógica de la aplicación.
</Card>


## Related topics

- [Introducción a React — Fundamentos para usarlo con Inertia × Laravel](/es/blog/react-introduction.md)
- [Introducción a Svelte — Fundamentos para usarlo con Inertia × Laravel](/es/blog/svelte-introduction.md)
- [Introducción a Vue.js — Fundamentos para usarlo con Inertia × Laravel](/es/blog/vue-introduction.md)
- [Skills](/es/packages/laravel-copilot-sdk/skills.md)
- [Instalación](/es/installation.md)
