自动加载器导致 class 未找到
Autoloader resulting in class not found
我想在我的 wordpress 项目中包含一个自动加载器。更具体地说,我正在开发一个插件,其中包含我所有 类 的 Classes/ 目录。我希望我的 wordpress 项目根目录和子项目 files/folders 可以通过命名空间访问这些 类。
我觉得我的 composer.json 应该负责自动加载器的实现,尽管我仍然收到 Class not found fatal 错误。还有其他人 运行 关注这个问题吗?感谢您提前提出任何建议!
这是我到目前为止尝试过的:
./composer.json
{
"autoload": {
"psr-4": {
"Classes\": "wp-content/plugins/example-plugin/Classes"
}
},
"require": {}
}
然后...
composer install
./index.php(在 wordpress 根目录中)
require_once('./vendor/autoload.php');
$foo = new \Classes\MyService();
var_dump($foo); //Fatal error: Uncaught Error: Class 'Classes\MyService' not found
die();
./wp-content/plugins/example-plugin/Classes/MyService.php
namespace Classes;
class MyService {
是的,确实,composer 应该处理您的依赖项和自动加载。你的配置也是正确的。让我们来看看清单:
你的环境是这样的吗?
$ tree
.
├── composer.json
├── composer.phar
├── index.php
├── vendor
│ ├── autoload.php
│ └── composer
│ ├── autoload_classmap.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── autoload_static.php
│ ├── ClassLoader.php
│ ├── installed.json
│ └── LICENSE
└── wp-content
└── plugins
└── example-plugin
└── Classes
└── MyService.php
你的composer.json是这样的吗?
$ cat composer.json
{
"name": "my/project",
"authors": [
{
"name": "My Name",
"email": "my@na.me"
}
],
"autoload": {
"psr-4": {
"Classes\": "wp-content/plugins/example-plugin/Classes"
}
},
"require": {}
}
你的实现是这样的吗?
$ cat wp-content/plugins/example-plugin/Classes/MyService.php
<?php
namespace Classes;
class MyService {
}
最后,你的索引是这样的吗?
$ cat index.php
<?php
require_once('./vendor/autoload.php');
$foo = new \Classes\MyService;
var_dump($foo);
如果您对所有这些问题的回答都是"Yes",您是否刷新了自动加载器?
$ composer dump-autoload
如果您的答案是"Yes",则创建一个新目录,下载composer.phar
、运行 php composer.phar init
,将此答案的文件复制并粘贴到该目录中,然后再试一次。
如果可行,那么 diff
这与您的实施有关。我的猜测是,如果你走到这一步,你有一个杂散字符——可能是 Unicode white space——隐藏在你的一个文件中。
我想在我的 wordpress 项目中包含一个自动加载器。更具体地说,我正在开发一个插件,其中包含我所有 类 的 Classes/ 目录。我希望我的 wordpress 项目根目录和子项目 files/folders 可以通过命名空间访问这些 类。
我觉得我的 composer.json 应该负责自动加载器的实现,尽管我仍然收到 Class not found fatal 错误。还有其他人 运行 关注这个问题吗?感谢您提前提出任何建议!
这是我到目前为止尝试过的:
./composer.json
{
"autoload": {
"psr-4": {
"Classes\": "wp-content/plugins/example-plugin/Classes"
}
},
"require": {}
}
然后...
composer install
./index.php(在 wordpress 根目录中)
require_once('./vendor/autoload.php');
$foo = new \Classes\MyService();
var_dump($foo); //Fatal error: Uncaught Error: Class 'Classes\MyService' not found
die();
./wp-content/plugins/example-plugin/Classes/MyService.php
namespace Classes;
class MyService {
是的,确实,composer 应该处理您的依赖项和自动加载。你的配置也是正确的。让我们来看看清单:
你的环境是这样的吗?
$ tree
.
├── composer.json
├── composer.phar
├── index.php
├── vendor
│ ├── autoload.php
│ └── composer
│ ├── autoload_classmap.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── autoload_static.php
│ ├── ClassLoader.php
│ ├── installed.json
│ └── LICENSE
└── wp-content
└── plugins
└── example-plugin
└── Classes
└── MyService.php
你的composer.json是这样的吗?
$ cat composer.json
{
"name": "my/project",
"authors": [
{
"name": "My Name",
"email": "my@na.me"
}
],
"autoload": {
"psr-4": {
"Classes\": "wp-content/plugins/example-plugin/Classes"
}
},
"require": {}
}
你的实现是这样的吗?
$ cat wp-content/plugins/example-plugin/Classes/MyService.php
<?php
namespace Classes;
class MyService {
}
最后,你的索引是这样的吗?
$ cat index.php
<?php
require_once('./vendor/autoload.php');
$foo = new \Classes\MyService;
var_dump($foo);
如果您对所有这些问题的回答都是"Yes",您是否刷新了自动加载器?
$ composer dump-autoload
如果您的答案是"Yes",则创建一个新目录,下载composer.phar
、运行 php composer.phar init
,将此答案的文件复制并粘贴到该目录中,然后再试一次。
如果可行,那么 diff
这与您的实施有关。我的猜测是,如果你走到这一步,你有一个杂散字符——可能是 Unicode white space——隐藏在你的一个文件中。