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 正确吗?我在网上尝试了许多不同的指南,但似乎无法正常工作。

4

2 回答 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');
于 2015-12-28T22:20:41.833 回答
0

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

use classes\session;

反而

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

于 2015-12-28T22:28:56.670 回答