¿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  

¿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 :(


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.