Мой проект имеет следующую файловую структуру:
|- src
|-- PcMagas
|---- Dropbox.php
|---- DropBoxFactory.php
|- web
|-- index.php
И все, что находится в папке src, загружается автоматически, поскольку PSR-4 диктует через композитора:
"autoload": {
"psr-4":{
"": "src/"
}
}
Образец класса, расположенного в src/PCMagas
:
namespace PCMagas;
use \GuzzleHttp\Client;
use PCMagas\Exceptions\FileNotFoundException;
class DropboxFactory
{
public static function fomeFunc()
{
//Do stuff
}
}
И Вкл index.php
Я использую такой класс:
require_once __DIR__ . '/../vendor/autoload.php';
use PCMagas\DropboxFactory;
DropboxFactory::fomeFunc();
В то время как хост Homestead Я запускаю свое приложение через:
composer dump-autoload -o
cd ^project_root^/web
php -S localhost:8990
Вывод команд:
$ composer dump-autoload -o
No composer.json in current directory, do you want to use the one at /home/pcmagas/Kwdikas/php/apps/datawise? [Y,n]? Y
Generating optimized autoload files
А для php -S localhost:8990
это:
PHP 7.0.33-0ubuntu0.16.04.3 Development Server started at Mon Apr 22 15:46:06 2019
Listening on http://localhost:8990
Document root is /home/pcmagas/Kwdikas/php/apps/datawise/web
Press Ctrl-C to quit.
И никаких проблем не возникает. Но когда я пытаюсь запустить через усадьбу, я получаю следующую ошибку:
Неустранимая ошибка: необученная ошибка: класс 'PCMagas \ DropboxFactory' не найден в /home/vagrant/code/web/index.php
Через выполнение:
vagrant ssh
А потом:
cd ~/code
composer dump-autoload -o
Работал как шарм, но все же у меня есть следующие вопросы:
- Почему в
host
(за пределами Homestead-vm) классы, загружаемые автоматически, а внутри - нет? Это потому что ./vendor
папка .gitignore
d?
- Как можно автоматически настроить порядок настройки Vm для автоматической загрузки классов пространств имен PSR-4? Работает ли
after.sh
как пользователь root или как пользователь без полномочий root vagrant
, который в /home/vagrant/code
моем приложении находится?