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
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/
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.