我有一个这样的文件夹结构的php应用程序
-/app
-/vendor
-index.php
我的“ vendor / autoload.php”文件包含在“ index.php”文件中。当我从供应商处调用一个类时,例如“ index.php”文件中的 upload(),它的加载没有问题。但是,如果我从“ app”文件夹中的类中的方法中调用同一类,则会显示未找到类错误。
“ app”文件夹中的类会像这样自动加载
"autoload": {
"psr-4":{
"App\\": "app/"
}
},
"require": {
"verot/class.upload.php": "dev-master"
}
如何在应用程序文件夹中自动加载的类中的供应商文件夹中调用类?
编辑:
app文件夹中的类在“ index.php”中这样调用
include("vendor/autoload.php");
$get_class = 'User';
require_once('app/'.$get_class.'.php');
$get_class = 'App\\'.str_replace('/', '\\', $class_name);
if(method_exists($get_class , 'uploadImage')) {
$class = new $get_class();
$class->{ 'uploadImage' }();
}
这是 User 类中的 upload()类
namespace App\User;
class User{
public function uploadImage()
{
$file = 'user.jpg';
$handle = new upload($file);
}
}
这是错误消息
Class 'App\upload' not found in app/User.php:20
答案 0 :(得分:1)
这是一个名称空间问题。您需要添加:
use upload;
在App\User
文件中的名称空间声明下,以导入上载类,或者在使用upload
类时需要使用完整的名称空间:
$handle = new \upload($file);
您可以阅读有关it in the manual
的更多信息 注意:在发布的代码中,尝试在$file
功能中使用uploadImage()
时未定义。
注释2:如果您在vendor/autoload.php
的顶部包含了index.php
(应该这样做),则无需在PHP中手动包括这些类。作曲家自动加载器将自动处理该问题。只需:$user = new App\User
。