自动加载器导致找不到类

时间:2017-09-06 00:29:09

标签: php wordpress composer-php autoload

我正在尝试在我的wordpress项目中加入自动加载器。更具体地说,我正在开发一个包含所有类的Classes /目录的插件。我希望这些类可以通过命名空间访问我的wordpress项目根目录和子文件/文件夹。

我觉得我的composer.json应该处理自动加载器实现,虽然我仍然得到一个Class not found致命错误。还有其他人遇到过这个问题吗?我提前感谢任何建议!

这是我到目前为止所尝试的:

./ composer.json

  {
        "autoload": {
            "psr-4": {
                "Classes\\": "wp-content/plugins/example-plugin/Classes"
            }
        },
        "require": {}
    }

...然后

composer install

./ index.php(在wordpress root中)

require_once('./vendor/autoload.php');

$foo = new \Classes\MyService();

var_dump($foo); //Fatal error: Uncaught Error: Class 'Classes\MyService' not found
die();

./可湿性粉剂内容/插件/示例-插件/类别/ MyService.php

namespace Classes;

class MyService {

1 个答案:

答案 0 :(得分:2)

是的,确实,作曲家应该照顾你的依赖和自动加载。您的配置也是正确的。让我们来看看清单:

您的环境是这样的吗?

$ 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);

如果对所有这些回答都是“是”,您是否刷新了自动加载器?

$ composer dump-autoload

如果您的答案为“是”,则创建一个新目录,下载composer.phar,运行php composer.phar init,将此答案的文件复制并粘贴到该目录中,然后重试。

如果可行,那么diff与您的实施相关。我的猜测是,如果你到目前为止,你有一个迷路的角色 - 可能是Unicode白色空间 - 隐藏在你的一个文件中。