Composer类没有发现致命错误 - wordpress插件开发

时间:2013-11-25 16:02:47

标签: wordpress composer-php php-5.3 psr-0

我正在尝试使用composer在wordpress插件中自动加载我的类。

我希望我的模型和控制器驻留在GD命名空间中,但我想将我的模型和控制器放在他们自己的目录中。

我遇到错误消息:致命错误:Class 'GD\ShortcodeController' not found in /.. .../src/GD/App.php on line 10

目录/文件结构

plugins
    gd
        cache
            // location for twig template cache
        public
            // location for plugin assets
        src
            controllers
                ShortcodeController.php
            models
            App.php
        templates
            test.html
        vendor
            // location for application dependencies installed via composer
            composer
                autoload_namespaces.php

composer.json

{
    "require": {
        "twig/twig": "1.*"
    },
    "autoload": {
        "psr-0": {
            "GD": ["src/", "src/GD/", "src/GD/controllers/", "src/GD/models/"]
        }
    }
}

供应商/作曲家/ autoload_namespaces.php

return array(
    'Twig_' => array($vendorDir . '/twig/twig/lib'),
    'GD' => array($baseDir . '/src', $baseDir . '/src/GD', $baseDir . '/src/GD/controllers', $baseDir . '/src/GD/models'),
);

GD / SRC / App.php

class App
{
    private $plugin_dir;
    private $twig;

    public function init()
    {
        $shortcodes = new ShortcodeController;
        add_shortcode( 'gd', [ $shortcodes , 'gd'] );
    }
}

GD / SRC /控制器/ ShortcodeController.php

<?php namespace GD;

class ShortcodeController
{
    // STUFF IN HERE
}

我应该使用自动加载类图而不是psr-0吗?使用classmap时,作曲家如何处理命名空间类?

1 个答案:

答案 0 :(得分:0)

您的"src/GD/controllers/"

中有psr-0
"autoload": {
    "psr-0": {
        "GD": ["src/", "src/GD/", "src/GD/controllers/", "src/GD/models/"]
    }
}

ShortcodeController.php文件夹和GD/src/controllers中的namespace文件是

<?php namespace GD;

class ShortcodeController
{
    // STUFF IN HERE
}

因此,您的ShortcodeController.php应位于src/GD/controllers/gd文件夹中,但现在路径为GD/src/controllers/ShortcodeController.php,而Autoloader正在查看"src/GD/controllers/gd/ShortcodeController.php"文件夹(包括数组中的其他条目)或者您可以在"src/GD/controllers/"中将"GD/src/controllers/"更改为psr-0。此外,您使用的是来自root / global shortcodes = new ShortcodeController;的{​​{1}},因此可能是

namespace

根据

shortcodes = new GD\ShortcodeController;

你的班级

"autoload": {
    "psr-0": {"GD\\": "GD/src/controllers/"}
}

应该在<?php namespace GD; class ShortcodeController { // STUFF IN HERE } 文件夹中。