当前位置: 首页 > 知识库问答 >
问题:

使用psr-4自动加载文件时的问题

司徒正信
2023-03-14

我已经试着让psr-4自动加载工作一个多星期了,但没有成功。

我的文件结构如下:

-Project
  -src
    -classes
       session.php
  -vendor
  index.php

我创建了psr-4自动加载功能,如下所示:

 "autoload": {
        "psr-4": {
         "classes\\": "src/classes"
    }

}

在使用作曲家转储-自动加载-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个答案

东门俊智
2023-03-14

看起来您正在将“src/classes”的别名定义为“classes”。因此,您需要使用:

use classes\session;

相反

更多信息:PSR-4自动加载器致命错误:找不到类

耿招
2023-03-14

最简单的解决方案:

use classes\session;

require_once('vendor/autoload.php');

session::put('test', 'test');

但是,您可能不想使用作为供应商命名空间,而是要在这里和那里调整一些东西:

-Project
  -src
    Session.php
  -public
    index.php
  -vendor
{
    "autoload": {
        "psr-4": {
            "Juakali\\": "src"
        }
    }
}

Juakali替换为您喜欢的供应商命名空间,这只是一个建议。理想情况下,如果您打算发布您的包,它应该是一个尚未被其他人声明的包,请参阅https://packagist.org.

供参考,参见

  • http://www.php-fig.org/psr/psr-4

使用您选择的上述供应商命名空间:

namespace Juakali;

class Session
{
    public static function exist($name)
    {
        return isset($_SESSION[$name]);
    }
}

考虑使用广泛使用的编码风格,例如PSR-2。

供参考,参见

  • http://www.php-fig.org/psr/psr-2/

假设您希望将index.php作为web应用程序的入口点公开,将其移动到您有信心公开为web服务器的文档根目录中,调整index.php中的导入,以及供应商/autoload.php的路径:

use Juakali\Session;

require_once __DIR__ . '/../vendor/autoload.php';

Session::put('test', 'test');
 类似资料:
  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和PSR-0/PSR-4的概念和这需要的目录结构。但是如果我用自己的MVC框架构建自己的项目 > 由于composer自带了自动加载器,它将加载我希望包含在项目中的所有依赖项,如果我不打算将我的网站变成分布式项目,我甚至需要自己的名称空间吗?为什么我不坚持使用include/requires? 最后,如果我采用名称空间,使

  • 我有一个在本地运行良好的Laravel项目(Mavericks),但是psr-4下的类没有加载到我们的后台服务器(CentOS)上。每次尝试composer更新或运行artisan命令时,我都会收到一个反射“未找到类”错误。 我的所有特定于应用程序的类都存储在我的Laravel项目的app/heatherland下,例如: 我的composer.json包含以下条目: 在本地,psr-4类被添加到

  • 1. 概述 本 PSR 是关于由文件路径 自动载入 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类对应的文件存放路径规范。 关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST):绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT):禁令,严令禁止;

  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?

  • 我正在用Slim和Twig创建一个web应用程序。我使用的库工作得很好,我可以轻松地调用它们。然而,作曲家并没有找到我自己的类。json自动加载psr-4(psr-0也找不到它们) 这是我的文件系统: 这是我的: 然后: 最后是我的文件: 当我运行时,命令输出: 生成包含0类的自动加载文件 然后以状态代码0退出。应该能找到4个班吧? 运行应用程序显示错误: 致命错误:未捕获错误:类'类\应用程序'

  • 我很难理解这个简单的界面有什么问题。 当我收到下面的通知 弃用通知:./App/Interfaces/renderData.php中的类App\Interfaces\renderData不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。 composer.json自动加载部分: 文件夹结构为: 我已经尝试将应用重命名为应用,然后转储自动加载,但问题仍然存在。