首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PSR-4自动加载器致命错误:找不到类

PSR-4自动加载器致命错误:找不到类
EN

Stack Overflow用户
提问于 2015-05-09 14:24:28
回答 1查看 23.1K关注 0票数 18

我的项目结构是这样的:

代码语言:javascript
复制
src/
   ├─ Model/
      └─ User.php

我的User.php文件如下所示:

代码语言:javascript
复制
<?php
namespace Bix\Model;

class User {

我的composer.json自动加载器是这样的:

代码语言:javascript
复制
"autoload": {
    "psr-4": {
      "Bix\\": "src/"
    }
  }

最后,我的bootstrap.php是:

代码语言:javascript
复制
use Bix\Model\User;

// PSR-4 Autoloader.
require_once "vendor/autoload.php";

但是,如果我尝试创建一个new User(),则会得到错误Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

看一下composer的autoload_psr4.php文件,它看起来没问题:

// autoload_psr4.php @ Composer生成

代码语言:javascript
复制
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));

return array(
    'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'KeenIO\\' => array($vendorDir . '/keen-io/keen-io/src'),
    'Bix\\' => array($baseDir . '/src'),
); 

有没有人能指出我在上面的错误之处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-09 16:43:35

首先,Linux (我不确定您使用哪台PC )是区分大小写的。在自动加载中,您定义了src/bix,而它是src/Bix

但更重要的是,使用PSR-4时,目录结构中不包括指定的名称空间前缀(以避免目录只包含一个目录)。在您的示例中,如果配置"Bix\\": "src/",则类Bix\Model\User应该位于src/Model/User.php中。

PHP EDIT PHP:您误解了名称空间。在PHP中,使用use Bix\Model;并不是说“将所有内容从Bix\Model导入到该文件的全局名称空间”。相反,它的意思是:“这个文件中的别名Model to Bix\Model”。

因此,您应该这样做:

代码语言:javascript
复制
require_once "vendor/autoload.php";

use Bix\Model;

$user = new Model\User();

或者:

代码语言:javascript
复制
require_once "vendor/autoload.php";

use Bix\Model\User;

$user = new User();
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30136773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档