我一直试图让psr-4自动加载工作超过一周,但没有成功 .
我的文件结构如下:
-Project
-src
-classes
session.php
-vendor
index.php
我已经创建了psr-4自动加载功能,如下所示:
"autoload": {
"psr-4": {
"classes\\": "src/classes"
}
}
在使用composer dump-autoload -0之后,在我的session.php类中,我给了命名空间:
namespace classes;
class session{
public static function exist($name){
return(isset($_SESSION[$name])) ? true : false;
}
然后我需要自动加载器并使用use函数来命名会话类,如下所示:
use src\classes\session as session;
require_once('vendor/autoload.php');
session::put('test', 'test');
打开index.php页面后,我得到了一个
致命错误:第10行的/var/www/test/Project/index.php中找不到类'src \ classes \ session'
是我的目录结构/ PHP正确吗?我在网上尝试过很多不同的指南,似乎无法让它发挥作用 .
2 回答
最简单的解决方案
无关
但是,您可能不希望将
classes
用作供应商名称空间,而是在这里和那里调整一些内容:目录结构
composer.json中的自动加载配置
将
Juakali
替换为您喜欢的供应商名称空间,这只是一个建议 . 理想情况下,如果您打算发布您的软件包,它应该是其他人尚未声明的软件包,请参阅https://packagist.org .供参考,请参阅
http://www.php-fig.org/psr/psr-4
https://getcomposer.org/doc/04-schema.md#psr-4
Juakali \ Session
使用您选择的上述供应商名称空间:
考虑使用广泛使用的编码风格,例如PSR-2 .
供参考,请参阅
index.php
假设您要将
index.php
公开为Web应用程序的入口点,请将其移动到您有信心作为Web服务器的文档根公开的目录中,调整index.php
中的导入以及vendor/autoload.php
的路径:看起来你将“src / classes”的别名定义为“类” . 所以你需要使用:
代替
更多信息:PSR-4 autoloader Fatal error: Class not found