为什么我需要通过ssh在Homestead VM中重新创建作曲家自动加载器?

问题描述 投票:1回答:1

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

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

src文件夹中的任何内容都会自动加载,因为PSR-4通过composer指示:

   "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-running vm之外)自动加载的类在内部不是?是因为./vendor文件夹是.gitignored?
  2. 如何在Vm设置中自动配置以自动加载PSR-4命名空间类? after.sh是以root用户还是非root用户vagrant运行在我的应用程序所在的/home/vagrant/code中?
php vagrant homestead psr-4
1个回答
0
投票

对于问题2,你可以通过在你的项目的after.sh上找到用户以下代码:

echo "I am user ${USER}"

如果输出为:运行命令vagrant provision

我是用户流浪汉

然后after.sh中的以下代码应该完成这项工作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.