我已经阅读了一些关于PHP中命名空间的内容以及compser如何处理名称空间的自动加载。我无法弄清楚为什么我的班级无法找到。有人可以帮忙吗?
我正在使用Laravel,以下是相关内容:
composer.json
相关内容:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/libraries"
],
"psr-0": {
"Facebook\\":"vendor/facebook/php-sdk-v4/src/"
}
}
执行composer dump-autoload
会在vendor/composer/autoload_namespaces.php
中为我提供以下内容:
'Facebook\\' => array($vendorDir . '/facebook/php-sdk-v4/src'),
我的供应商文件夹结构:Facebook是:
vendor
|__ facebook
|__ php-sdk-v4
|__ src
|__ Facebook
|__ ..
|__ Facebook.php
|__ ..
尝试$facebook = new Facebook($config)
给我
Symfony \ Component \ Debug \ Exception \ FatalErrorException(E_UNKNOWN) 未找到“Facebook”类
我做错了什么?!
答案 0 :(得分:2)
应该自动加载vendor文件夹中的任何内容,因此没有必要使用这些行
"psr-0": {
"Facebook\\":"vendor/facebook/php-sdk-v4/src/"
}
您是否已将这些行添加到composer.json并以通常的作曲方式安装库?
"require": {
"facebook/php-sdk-v4": "~5.0"
}
答案 1 :(得分:1)
Facebook
是该类的名称,但$facebook = new \Facebook\Facebook($config);
似乎也是您的命名空间的名称。
在这种情况下,你可以这样实例:
operator ~