#php #vagrant #homestead #psr-4
#php #vagrant #homestead #psr-4
Вопрос:
Мой проект имеет следующую файловую структуру:
|- src
|-- PcMagas
|---- Dropbox.php
|---- DropBoxFactory.php
|- web
|-- index.php
И все, что находится в папке src, загружается автоматически, как предписывает PSR-4, через composer:
"autoload": {
"psr-4":{
"": "src/"
}
}
Пример класса, расположенного в src/PCMagas
, является:
namespace PCMagas;
use GuzzleHttpClient;
use PCMagasExceptionsFileNotFoundException;
class DropboxFactory
{
public static function fomeFunc()
{
//Do stuff
}
}
И на index.php
я использую класс таким образом:
require_once __DIR__ . '/../vendor/autoload.php';
use PCMagasDropboxFactory;
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.
И никаких проблем вообще. Но когда я пытаюсь запустить через homestead, я получаю следующую ошибку:
Неустранимая ошибка: Неперехваченная ошибка: класс ‘PCMagas DropboxFactory’ не найден в /home/vagrant/code/web/index.php
Через выполнение:
vagrant ssh
И после:
cd ~/code
composer dump-autoload -o
Сработало как шарм, но все же у меня есть следующие вопросы:
- Почему на
host
(за пределами виртуальной машины, работающей на Homestead) классы загружаются автоматически, а внутри нет? Это потому./vendor
, что папка является.gitignore
общей? - Как я могу автоматически настроить порядок при настройке виртуальной машины для автоматической загрузки классов с пространством имен PSR-4?
after.sh
Запускается ли он от имени пользователя root илиvagrant
от имени пользователя, не имеющего root, который/home/vagrant/code
находится в моем приложении?
Комментарии:
1. Можете ли вы попробовать это, пожалуйста
cd ^project_root^ composer dump-autoload -o php -S localhost:8990
2. Веб-страница загружается из
web
папки.3. Добавлен вывод к отредактированному ответу.
Ответ №1:
Для вопроса 2
вы можете узнать пользователя, разместив в своем проекте after.sh
следующий код:
echo "I am user ${USER}"
И запустите команду vagrant provision
, если вывод:
Я пользователь vagrant
Тогда следующий фрагмент кода в after.sh
должен выполнить эту работу:
cd ~/code
composer install
composer dump-autoload -o
cd
На первый вопрос у меня все еще нет ответа, чтобы дать вам.