The following problem: I have defined a classmap in my composer.json:
"autoload": { "classmap": [ "app/controllers", "app/models", "app/helper.php" ] }
However, when I create a new file in the "controllers" or "models" folder, it will not load them and I always have to make a composer dump-autoload.
Is this the correct behavior? I thought the autoloader from composer monitors the folder for new files then?
Yes, this is correct behaviour. If you want new classes to be loaded automatically, you have to use either PSR-0 or PSR-4 autoloading.
Generating the classmap requires Composer to know the filename that contains a certain class. This can only be done by parsing the whole source code in the directory and scanning for classes, interfaces and trait definitions.
This usually is a CPU and I/O intensive task, so it is only done when Composer does install/update or (on demand) dumps the autoloader, it is not done with every require "vendor/autoload.php";
.
Note that the classmap autoloading is simply there for old legacy codebases that didn't implement at least PSR-0. It is not intended for new code - unless you want to pay the price to dump the autoloader again and again during development.
Go to the root of your server by SSH. Now do the following:
ls
to list all the files.composer.lock
file; remove the file with rm composer.lock
command.php composer update
command. Depending on your linux type you may have to run php-cli composer update
.
Step 3 will create a new composer.lock
file and all your classes will be loaded again. Do this anytime you add new classes.
or:
composer dump-autoload
command.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With