IronWoods.es

Desarrollo web

Blog / Laravel 5 - Añadir un directorio para los modelos

Por defecto, Laravel 5, sitúa los modelos en 'app/' siendo bastante habitual crear el directorio 'app/Models/' donde almacenarlos.


Todos los modelos deberán tener el namespace correcto, tanto los nuevos, como el modelo User que ya viene en Laravel y que tiene algunas particularidades siendo el motivo de esta entrada.

Si algo funciona... ¡no lo toques!


Si no sigues esta premisa y decidiste añadir un directorio para almacenar los modelos. Hay dos cosas que debes considerar:

¿Cómo creamos los modelos?

Lo habitual es crear las distintas clases de Laravel usando comandos de artisan. Entre sus ventajas está el evitarnos problemas con los namespaces.


Ejemplo

Crear un modelo llamado Images en el directorio donde Laravel guarda los modelos por defecto:

artisan make:model Images

Se crea el modelo en el fichero: 'MiAppLaravel/app/Images.php'.


Para crearlo en el directorio 'MiAppLaravel/app/Models/' el comando será:

artisan make:model Models/Images

Esto crea el modelo limpio en el fichero: 'MiAppLaravel/app/Models/Images.php', con el namespace apropiado.


Código del nuevo modelo:

<?php


namespace App\Models;


use Illuminate\Database\Eloquent\Model;



class Images extends Model

{

//

}

Adaptando el sistema: el modelo User

El modelo User viene al instalar Laravel y se usa inicialmente, en la autenticación de usuarios. Entonces, cuando lo movemos al directorio 'app/Models/' debemos hacer lo siguiente:

1. Cambiar el namespace

El namespace pasara de:

namespace App;


a:

namespace App\Models;

Con esto Laravel encontrara la clase*.


2. Indicar al sistema de autenticación la clase que se va a usar.

*Aunque la clase se carga, el sistema básico de autenticación necesita saber qué modelo usar.


Abrir el fichero 'config/auth.php' y modificar el modelo en uso. En User Providers tenemos el bloque:

'providers' => [

'users' => [

'driver' => 'eloquent',

'model' => App\User::class,

],

Cambiamos:

App\User::class


por:

App\Models\User::class

08-06-2019

Sitio libre de scripts. Solo efectos HTML / CSS