【问题标题】:Why I needed to recreate the composer autoloader inside the Homestead VM via ssh?为什么我需要通过 ssh 在 Homestead VM 中重新创建 composer 自动加载器?
【发布时间】:2019-09-11 14:33:00
【问题描述】:

我的项目文件结构如下:

|- 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 的 host 我通过以下方式启动我的应用程序:

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文件夹是.gitignored?
  2. 如何在 Vm 设置中自动配置以自动加载 PSR-4 命名空间类? after.sh 是以 root 用户身份运行还是以我的应用程序所在 /home/vagrant/code 中的非 root 用户 vagrant 运行?

【问题讨论】:

  • 你能试试这个吗cd ^project_root^ composer dump-autoload -o php -S localhost:8990
  • 网页从web文件夹加载。
  • 将输出添加到已编辑的答案中。

标签: php vagrant homestead psr-4


【解决方案1】:

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

echo "I am user ${USER}"

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

我是用户 vagrant

那么after.sh 中的以下代码应该可以完成这项工作:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2017-03-25
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多