【发布时间】: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
工作就像一个魅力,但我仍然有以下问题:
- 为什么在
host(在 Homestead 运行的 vm 之外)上的类在内部没有被自动加载?是不是因为./vendor文件夹是.gitignored? - 如何在 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