【问题标题】:Composer class not found fatal error - wordpress plugin developmentComposer 类未找到致命错误 - wordpress 插件开发
【发布时间】:2013-12-10 10:38:28
【问题描述】:

我正在尝试使用 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/controllers/ShortcodeController.php

<?php namespace GD;

class ShortcodeController
{
    // STUFF IN HERE
}

我应该使用自动加载类映射而不是 psr-0 吗? composer在使用classmap时如何处理命名空间类?

【问题讨论】:

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


    【解决方案1】:

    您的psr-0 中有"src/GD/controllers/" 此处

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

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

    <?php namespace GD;
    
    class ShortcodeController
    {
        // STUFF IN HERE
    }
    

    所以,您的 ShortcodeController.php 应该在 src/GD/controllers/gd 文件夹中,但现在路径是 GD/src/controllers/ShortcodeController.phpAutoloader 正在查看 "src/GD/controllers/gd/ShortcodeController.php" 文件夹(包括数组中的其他条目),或者您可以更改"src/GD/controllers/""GD/src/controllers/"psr-0。另外,您正在使用来自根/全局namespaceshortcodes = new ShortcodeController; 所以,它可能是

    shortcodes = new GD\ShortcodeController;
    

    根据

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

    你的班级

    <?php namespace GD;
    
    class ShortcodeController
    {
        // STUFF IN HERE
    }
    

    应该在GD/src/controllers/gd 文件夹中。

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 1970-01-01
      • 2017-12-28
      • 2015-12-16
      • 1970-01-01
      • 2019-08-08
      • 2013-05-08
      • 2019-05-14
      • 2018-05-27
      相关资源
      最近更新 更多