Почему мне нужно было воссоздать автозагрузчик композитора внутри виртуальной машины Homestead через ssh? - PullRequest
1 голос
/ 22 апреля 2019

Мой проект имеет следующую файловую структуру:

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

Работал как шарм, но все же у меня есть следующие вопросы:

  1. Почему в host (за пределами Homestead-vm) классы, загружаемые автоматически, а внутри - нет? Это потому что ./vendor папка .gitignore d?
  2. Как можно автоматически настроить порядок настройки Vm для автоматической загрузки классов пространств имен PSR-4? Работает ли after.sh как пользователь root или как пользователь без полномочий root vagrant, который в /home/vagrant/code моем приложении находится?

1 Ответ

0 голосов
/ 22 апреля 2019

На вопрос 2 вы можете узнать пользователя, разместив на вашем проекте after.sh следующий код:

echo "I am user ${USER}"

И выполните команду vagrant provision, если вывод:

Я пользователь vagrant

Тогда следующий код в after.sh должен выполнить эту работу:

cd ~/code
composer install
composer dump-autoload -o
cd

На первое у меня до сих пор нет ответа, чтобы дать вам.

...