PSR-4 autoloader Fatal error: Class not found
PSR-4 autoloader Fatal error: Class not found
我的项目结构如下:
src/
├─ Model/
└─ User.php
我的 User.php 文件如下所示:
<?php
namespace Bix\Model;
class User {
我的 composer.json 自动加载器是这样的:
"autoload": {
"psr-4": {
"Bix\": "src/"
}
}
最后我的bootstrap.php是这样的:
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
查看作曲家 autoload_psr4.php 文件看起来不错:
// autoload_psr4.php @由 Composer 生成
$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'),
);
谁能指出我上面的问题在哪里?
首先,Linux(我不确定你用的是哪台PC)是区分大小写的。在您的自动加载中,您定义了 src/bix
,而它是 src/Bix
。
但更重要的是,对于 PSR-4,指定的命名空间前缀 不 包含在目录结构中(以避免目录只包含一个目录)。在您的情况下,如果您配置 "Bix\": "src/"
,class Bix\Model\User
应该位于 src/Model/User.php
.
编辑:您误解了 PHP 命名空间。在 PHP 中,你不是说 "import everything from Bix\Model
into the global namespace for this file" 和 use Bix\Model;
。相反,它意味着:"Alias Model
in this file to Bix\Model
".
所以你应该这样做:
require_once "vendor/autoload.php";
use Bix\Model;
$user = new Model\User();
或:
require_once "vendor/autoload.php";
use Bix\Model\User;
$user = new User();
我的项目结构如下:
src/
├─ Model/
└─ User.php
我的 User.php 文件如下所示:
<?php
namespace Bix\Model;
class User {
我的 composer.json 自动加载器是这样的:
"autoload": {
"psr-4": {
"Bix\": "src/"
}
}
最后我的bootstrap.php是这样的:
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
查看作曲家 autoload_psr4.php 文件看起来不错:
// autoload_psr4.php @由 Composer 生成
$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'),
);
谁能指出我上面的问题在哪里?
首先,Linux(我不确定你用的是哪台PC)是区分大小写的。在您的自动加载中,您定义了 src/bix
,而它是 src/Bix
。
但更重要的是,对于 PSR-4,指定的命名空间前缀 不 包含在目录结构中(以避免目录只包含一个目录)。在您的情况下,如果您配置 "Bix\": "src/"
,class Bix\Model\User
应该位于 src/Model/User.php
.
编辑:您误解了 PHP 命名空间。在 PHP 中,你不是说 "import everything from Bix\Model
into the global namespace for this file" 和 use Bix\Model;
。相反,它意味着:"Alias Model
in this file to Bix\Model
".
所以你应该这样做:
require_once "vendor/autoload.php";
use Bix\Model;
$user = new Model\User();
或:
require_once "vendor/autoload.php";
use Bix\Model\User;
$user = new User();