Я создаю веб-приложение, где пользователь динамически может загружать файлы php контроллеров из веб-браузера. Во всем этом есть проблема.
Поскольку каждый класс должен быть скомпилирован для использования внутри laravel, должен быть выполнен компилятор composer dump-autoload
autoload. Но я не хочу делать это вручную с терминала. Внутри «класса регистра» я вызывал явно некоторые команды, которые не работали для меня, например:
Artisan::call('dump-autoload');
exec("/path/to/app/composer dump-autoload");
shell_exec('php artisan dump-autoload');
shell_exec('composer dump-autoload');
Новые контроллеры все еще не найдены. Итак, я не знаю, чего мне не хватает. Или если есть еще один способ «загрузить» мои классы динамически.
Don't forget to actually 'require' or 'include' the class after you compile it
Конечно, файл включен и подтвержден точкой 2. Это выглядит подозрительно:
у меня не было уверенности в том, что пользователь, на котором запущен php, не имеет достаточных привилегий для выполнения операции или записи в требуемые каталоги
Однако, как могло быть возможно, что php не имеет достаточных привилегий, может ли это composer dump-autoclass
команду composer dump-autoclass
?
Apache / 2.4.9 (Fedora) PHP / 5.5.12
Хорошо, чтобы это сделать, вы можете сделать это:
exec("composer dump-autoload -d /path/to/laravel-project/");
Вы должны явно сказать композитору, где искать composer.json
.
-d
Если указано, используйте данный каталог как рабочий каталог
Без опции -d
композитор предполагает, что ваш composer.json
живет в path/to/laravel-project/public/
. Поскольку все запросы перенаправляются на передний контроллер index.php
и это означает, что текущий рабочий каталог является public/
Здесь не достаточно информации, чтобы помочь нам помочь вам.
Что нужно учитывать:
Попробуйте обновить свой вопрос с дополнительной информацией, если вы можете понравиться.