我的项目具有以下文件结构:
|- 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
工作就像一个魅力,但我仍然有以下问题:
host
(在Homestead-running vm之外)自动加载的类在内部不是?是因为./vendor
文件夹是.gitignore
d?after.sh
是以root用户还是非root用户vagrant
运行在我的应用程序所在的/home/vagrant/code
中?对于问题2
,你可以通过在你的项目的after.sh
上找到用户以下代码:
echo "I am user ${USER}"
如果输出为:运行命令vagrant provision
:
我是用户流浪汉
然后after.sh
中的以下代码应该完成这项工作:
cd ~/code
composer install
composer dump-autoload -o
cd
对于第一个,我仍然没有答案给你。