php - 从供应商外部文件夹中的自动加载类中的供应商文件夹加载类
问题描述
我有一个像这样的文件夹结构的 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
解决方案
这是一个命名空间问题。您需要添加:
use upload;
在你App\User
-file 中的命名空间声明下导入上传类,或者upload
在使用它时需要使用类的完整命名空间:
$handle = new \upload($file);
您可以在手册中阅读有关它的更多信息
注意:在发布的代码中,$file
当您尝试在uploadImage()
-function 中使用它时未定义。
注意 2:如果您已经包含vendor/autoload.php
在您的顶部index.php
(您应该),则无需在 PHP 中手动包含这些类。作曲家自动加载器将自动处理。只是为了:$user = new App\User
。
推荐阅读
- c# - 在 C# 中将矩阵分配给 [] 数组 Matrix
- qt - QT5.10.1 找不到服务 - Window 上的“org.qt-project.qt.mediaplayer”
- ruby-on-rails - 为什么我会收到这个未初始化的常量错误?
- r - 如何根据 R 中另一列中的特定文本创建二进制列?
- java - Netbeans 8.2 无法验证 Git 凭证?
- c++ - cin.rdstate() 返回什么?
- php - 在 STR 上将 STR 的其余部分替换为 0
- python - 空间 | 是否可以删除短语匹配器中对长度的硬编码限制?
- c++ - 为什么我不能发送 PostMessage?
- css - 如何创建多色边框?