Reputation: 14747
I am building a web application where the user dynamically can upload Controllers php files from the web browser. There is a problem in all of this.
Since every class should be compiled in order be used inside of laravel, the commmand composer dump-autoload
must be executed. But I do not want to do this manually from the terminal. Inside of a "register class" I have called explicitly some commands that have not worked for me, for example:
Artisan::call('dump-autoload');
exec("/path/to/app/composer dump-autoload");
shell_exec('php artisan dump-autoload');
shell_exec('composer dump-autoload');
The new controllers are still not being found. So, I do not know what I am missing. Or if there is another way to "load" my classes dynamically.
Don't forget to actually 'require' or 'include' the class after you compile it
Sure, the file is included and confirmed by the point 2.This looks suspicious:
my off-the-cuff guess would be that the user running php doesn't have sufficient privileges to perform the operation or write to the required directories
However, how could it be possible that php doesn't have enough privileges, could be it affects the composer dump-autoclass
command?
Apache/2.4.9 (Fedora) PHP/5.5.12
Upvotes: 3
Views: 3919
Reputation: 108
Okay, I solved it. What I did to solve this:
composer update
gave me the following error:
[Seld\JsonLint\ParsingException]
Expected: 'STRING' - It appears you have an extra trailing comma I opened composer.json and there was one extra comma in last line:
"require": {
"php": ">=8.1.0",
"laravel/framework": "9.1.*",
}
Removed the comma so it looked like this:
"require": {
"php": ">=8.1.0",
"laravel/framework": "9.1.*"
}
And problem was gone.
Upvotes: 0
Reputation: 10132
Well to work this out you can do this:
exec("composer dump-autoload -d /path/to/laravel-project/");
You have to explicitly tell composer where to look for composer.json
.
-d
If specified use the given directory as working directory
Without -d
option, composer assumes your composer.json
lives in path/to/laravel-project/public/
. Because all requests are routed to front controller index.php
and by that mean the current working directory is public/
Upvotes: 3
Reputation: 2044
There isn't really enough information here to help us help you.
Things to consider:
Try updating your question with some additional information if you can please.
Upvotes: 2