为什么我需要通过ssh在Homestead VM中重新创建composer autoloader?

时间:2019-04-22 11:32:44

标签: php vagrant homestead psr-4

我的项目具有以下文件结构:

|- src
|-- PcMagas
|---- Dropbox.php
|---- DropBoxFactory.php
|- web
|-- index.php

随着PSR-4通过作曲家的命令,src文件夹中的所有内容都将自动加载:

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

也没有任何问题。但是,当我尝试通过宅基地启动时,出现以下错误:

  

致命错误:未捕获的错误:在/home/vagrant/code/web/index.php中找不到类'PCMagas \ DropboxFactory'

通过:

vagrant ssh

然后:

cd ~/code
composer dump-autoload -o

像魅力一样工作,但仍然存在以下问题:

  1. 为什么在host(在运行Homestead的vm之外)上无法自动加载而在内部的类呢?是因为./vendor文件夹是.gitignore d?
  2. 如何在Vm设置中自动进行配置以自动加载PSR-4名称空间的类? after.sh是否以root身份或以我的应用程序所在vagrant中的非root用户/home/vagrant/code身份运行?

1 个答案:

答案 0 :(得分:0)

对于问题2,您可以通过在项目after.sh上放置以下代码来找出用户:

echo "I am user ${USER}"

如果输出为:

,然后运行命令vagrant provision

  

我是用户流浪汉

然后after.sh中的以下代码就可以完成工作:

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

对于第一个,我仍然没有答案。