繁体   English   中英

从供应商外部的文件夹自动加载的类中的供应商文件夹中加载类

[英]Load class from vendor folder inside autoloaded class from a folder outside vendor

我有一个具有这样的文件夹结构的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文件夹中自动加载的类中的vendor文件夹中调用类?

编辑:

应用文件夹中的类在“ 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

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

use upload;

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

$handle = new \upload($file); 

您可以在手册中了解更多信息

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM