# Instalación de paquetes adicionales

Además de todas las utilidades que incorpora Laravel y que podemos utilizar directamente sin instalar nada más, también nos permite añadir de forma muy sencilla paquetes para complementar su funcionalidad.

Para instalar un paquete tenemos dos opciones, utilizar el comando de `composer`:

```bash
sudo composer require <nombre-del-paquete-a-instalar>
```

O editar el fichero `composer.json` de la raíz de nuestro proyecto, añadir el paquete en su sección "`require`", y por último ejecutar el comando:

```bash
sudo composer update
```

Esta última opción es más interesante ya que nos permitirá una mayor configuración, por ejemplo, indicar la versión del paquete o repositorio, etc.

La lista de todos los paquetes disponibles la podemos encontrar en "<https://packagist.org>", en la cual permite realizar búsquedas, ver el número de instalaciones de un paquete, etc.

Algunos de los paquetes más utilizados en Laravel son:

| Nombre       | Descripción                     | Url                                                  |
| ------------ | ------------------------------- | ---------------------------------------------------- |
| Debugbar     | Barra de depuración de Laravel  | <https://github.com/barryvdh/laravel-debugbar>       |
| IDE Helper   | Helper para IDEs                | <https://github.com/barryvdh/laravel-ide-helper>     |
| Entrust      | Role permissions for Laravel 5  | <https://github.com/Zizaco/entrust>                  |
| Ardent       | Modelos auto-validados          | <https://github.com/laravelbook/ardent>              |
| MongoDB      | Extensión para soportar MongoDB | <https://github.com/jenssegers/laravel-mongodb>      |
| Notification | Notificaciones                  | <https://github.com/edvinaskrucas/notification>      |
| Former       | Automatización de formularios   | <https://github.com/anahkiasen/former>               |
| Image        | Manipulación de imágenes        | <https://github.com/Intervention/image>              |
| Stapler      | Manipulación de ficheros        | <https://github.com/CodeSleeve/laravel-stapler>      |
| User Agent   | Obtener info. del *user agent*  | <https://github.com/jenssegers/laravel-agent>        |
| Sitemap      | Genearción del Sitemap          | <https://github.com/RoumenDamianoff/laravel-sitemap> |
| Excel        | Trabajar con Excel y csv        | <https://github.com/Maatwebsite/Laravel-Excel>       |
| DOMPdf       | Trabajar con PDF                | <https://github.com/barryvdh/laravel-dompdf>         |

Una vez añadido el paquete tendremos que modificar también el fichero de configuración `config/app.php`, en su sección `providers` y `aliases`, para que la plataforma encuentre el paquete que acabamos de añadir. Los detalles de configuración en general se encuentran indicados en la web o repositorio de GitHub de cada proyecto.

## Ejemplo: instalación de paquete de notificaciones

Por ejemplo, para instalar el paquete "Notification" de *edvinaskrucas* tendríamos que editar el fichero `composer.json` y en su sección `require` añadir la siguiente línea:

```javascript
"edvinaskrucas/notification": "5.*"
```

> Al añadir el paquete al fichero `composer.json` tenemos que llevar mucho cuidado de añadir una coma como separador de los elementos de la sección `require`, **exceptuando** el último elemento de la lista, que no tendrá que llevar coma al final (sino nos dará error).

Una vez añadido ejecutamos el siguiente comando para instalar el paquete:

```bash
sudo composer update
```

Y después de instalar tendríamos que editar el fichero `config/app.php` para añadir, en la sección `providers`, la siguiente línea:

```php
Krucas\Notification\NotificationServiceProvider::class,
```

Y en la sección `aliases` lo siguiente:

```php
'Notification' => Krucas\Notification\Facades\Notification::class,
```

Además también tenemos que añadir el *middleware* al fichero `app/Http/Kernel.php`. En el array de `$middlewareGroups` añadimos la siguiente línea al grupo `web`, después de `'Illuminate\Session\Middleware\StartSession'`:

```php
\Krucas\Notification\Middleware\NotificationMiddleware::class,
```

Con esto ya tendríamos instalada esta librería y podríamos empezar a utilizarla. Por ejemplo, para añadir una notificación desde un controlador podemos utilizar los siguientes métodos:

```php
Notification::success('Success message');
Notification::error('Error message');
Notification::info('Info message');
Notification::warning('Warning message');
```

> Importante: tenemos que acordarnos de añadir el espacio de nombres de esta clase (`use Notification;`) en el controlador donde la vayamos a utilizar, de lo contrario nos aparecería un error.

Y para mostrar las notificaciones, desde una vista (preferiblemente desde el *layout* principal), añadiríamos el siguiente código:

```php
{!! Notification::showAll() !!}
```

O también podemos usar la extensión que incorpora para Blade y simplemente añadir:

```php
@notification()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ajgallego.gitbook.io/laravel-5/capitulo_5/capitulo_5_paquetes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
