¿Por qué tengo que ejecutar el comando "composer dump-autoload" para que las migraciones funcionen en laravel?

80

He creado algunas clases de migración en mi aplicación para crear las tablas que necesito, pero sigo recibiendo errores. Necesito ejecutar este comando:

composer dump-autoload

Solo entonces vuelve a funcionar como se esperaba. ¿Estoy haciendo algo mal que genera este error o este es un comportamiento normal con las migraciones?

A continuación se muestra el error que obtengo al ejecutar el proceso de migración:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  
Hasan Al-Natour
fuente
¿estás usando phpartisan para migraciones?
Duenna
sí, lo estoy usando para generar la tabla de creación y ejecutar la migración
Hasan Al-Natour
¿Ha utilizado Illuminate \ Database \ Schema \ Blueprint? use Illuminate \ Database \ Migrations \ Migration; dentro de su archivo y están ampliando la clase de migración?
Duenna
sí, usando "use Illuminate \ Database \ Schema \ Blueprint" y "use Illuminate \ Database \ Migrations \ Migration".
Hasan Al-Natour
Por lo general, cuando creo archivos de migración, se ven similares a este codehare.io/3iRxd. Eche un vistazo y vea si el suyo sigue un patrón similar; si no es así, debe asegurarse de que está extendiendo la clase de migración. todo se ve bien?
Duenna

Respuestas:

95

Bien, creo que sé el problema que tienes.

Básicamente, debido a que Composer no puede ver los archivos de migración que está creando, debe ejecutar el comando dump-autoload que no descargará nada nuevo, pero busca todas las clases que necesita incluir nuevamente. Simplemente regenera la lista de todas las clases que deben incluirse en el proyecto (autoload_classmap.php), y esta es la razón por la que su migración funciona después de ejecutar ese comando.

Cómo solucionarlo (posiblemente) Necesita agregar información adicional a su archivo composer.json.

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

Debe agregar la ruta a su carpeta de migraciones a la matriz del mapa de clases. Luego ejecute los siguientes tres comandos ...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

Esto borrará los archivos compilados actuales, actualizará las clases que necesita y luego las volverá a escribir para que no tenga que volver a hacerlo.

Lo ideal es que lo ejecutes composer dump-autoload -opara una carga más rápida de tus páginas web. La única razón por la que no es predeterminado es porque tarda un poco más en generarse (pero solo se nota un poco).

Espero que puedas arreglar esto, ya que es muy molesto :(

Dueña
fuente
6
No entiendo por qué laravel no manejó esto, es un gran marco.
Hasan Al-Natour
ya tengo mi archivo composer.json con esto: "autoload": {"classmap": ["database"], "psr-4": {"App \\": "app /"}},
Hasan Al- Natour
¿Cómo debo agregar la ruta?
Hasan Al-Natour
Tuve un error al ejecutar "php artisan dump-autoload": [InvalidArgumentException] El comando "dump-autoload" no está definido.
Hasan Al-Natour
4
lo siento, necesitas usar composer, no php artisan. Entonces su compositor dump-autoload
Duenna
2

Deberías correr:

composer dump-autoload

y si no funciona debes:

re-install composer
afshindadashnezhad
fuente
2

Respuesta corta: los mapas de clase son estáticos, mientras que la carga automática de PSR es dinámica.

Si no desea utilizar mapas de clase, utilice la carga automática de PSR en su lugar.

Daniel W.
fuente