首页 文章

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

提问于
浏览
0

我一直试图让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 回答

  • 3

    最简单的解决方案

    use classes\session;
    
    require_once('vendor/autoload.php');
    
    session::put('test', 'test');
    

    无关

    但是,您可能不希望将 classes 用作供应商名称空间,而是在这里和那里调整一些内容:

    目录结构

    -Project
      -src
        Session.php
      -public
        index.php
      -vendor
    

    composer.json中的自动加载配置

    {
        "autoload": {
            "psr-4": {
                "Juakali\\": "src"
            }
        }
    }
    

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

    供参考,请参阅

    Juakali \ Session

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

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

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

    供参考,请参阅

    index.php

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

    use Juakali\Session;
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    Session::put('test', 'test');
    
  • 0

    看起来你将“src / classes”的别名定义为“类” . 所以你需要使用:

    use classes\session;
    

    代替

    更多信息:PSR-4 autoloader Fatal error: Class not found

相关问题