Why do I have to run "composer dump-autoload" command to make migrations work in laravel?

PhpLaravelLaravel 5

Php Problem Overview


I have built some migration classes in my application to create the tables I need, but I keep getting errors. I need to run this command:

composer dump-autoload

Only then it works again as expected. Am I doing something wrong that generates this error or this is a normal behaviour with migrations?

Below is the error that I get when running the migration process:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  

Php Solutions


Solution 1 - Php

OK so I think i know the issue you're having.

Basically, because Composer can't see the migration files you are creating, you are having to run the dump-autoload command which won't download anything new, but looks for all of the classes it needs to include again. It just regenerates the list of all classes that need to be included in the project (autoload_classmap.php), and this is why your migration is working after you run that command.

How to fix it (possibly) You need to add some extra information to your composer.json file.

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

You need to add the path to your migrations folder to the classmap array. Then run the following three commands...

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

This will clear the current compiled files, update the classes it needs and then write them back out so you don't have to do it again.

Ideally, you execute composer dump-autoload -o , for a faster load of your webpages. The only reason it is not default, is because it takes a bit longer to generate (but is only slightly noticable).

Hope you can manage to get this sorted, as its very annoying indeed :(

Solution 2 - Php

You should run:

composer dump-autoload

and if does not work you should re-install composer

Solution 3 - Php

Short answer: classmaps are static while PSR autoloading is dynamic.

If you don't want to use classmaps, use PSR autoloading instead.

Solution 4 - Php

My error was placing a function inside config/fortify.php, in my case it was an anonymous function that gave the error.

The definitive solution for this is to see what files I normally modify in the config/ folder.

In many places they say delete the files from bootstrap/cache/* but it didn't work in my case, and it didn't really make sense. In any case I leave you the commands:

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

But I really recommend that you go through the base laravel config files that you have configured. here you will find the error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHasan Al-NatourView Question on Stackoverflow
Solution 1 - PhpDuennaView Answer on Stackoverflow
Solution 2 - PhpafshindadashnezhadView Answer on Stackoverflow
Solution 3 - PhpDaniel W.View Answer on Stackoverflow
Solution 4 - PhpfafaafView Answer on Stackoverflow