Issue
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.
Things to consider:
- Security implications: of course, but my question is widely open to dynamically recognize new classes in execution time
- I am completely sure about paths, I have tested every issue from a linux terminal and all worked fine (with absolute and relative path). For these reasons, I look for another reason instead of paths.
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
Solution
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/
Answered By - Rahil Wazir Answer Checked By - Katrina (WPSolving Volunteer)