首页 > 解决方案 > 从供应商外部文件夹中的自动加载类中的供应商文件夹加载类

问题描述

我有一个像这样的文件夹结构的 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

标签: phpcomposer-php

解决方案


这是一个命名空间问题。您需要添加:

use upload;

在你App\User-file 中的命名空间声明下导入上传类,或者upload在使用它时需要使用类的完整命名空间:

$handle = new \upload($file); 

您可以在手册中阅读有关它的更多信息

注意:在发布的代码中,$file当您尝试在uploadImage()-function 中使用它时未定义。

注意 2:如果您已经包含vendor/autoload.php在您的顶部index.php(您应该),则无需在 PHP 中手动包含这些类。作曲家自动加载器将自动处理。只是为了:$user = new App\User


推荐阅读