You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Composer从1升级到2后出现PSR-4自动加载错误求助

Composer 1升级到2后PSR-4自动加载错误解决

问题

升级Composer至2.x版本后,出现自动加载错误:

类moduleNema\twigExtensions\NemaTwigExtension不符合PSR-4自动加载标准,被跳过。

目录结构

modules
  -> modulesNema
     -> controllers
     -> services
        -> Dark.php
        -> Rent.php
     -> twigExtensions
        -> NemaTwigExtensions.php
     -> Module.php
  -> Module.php

相关代码

NemaTwigExtensions.php

<?php
namespace moduleNema\twigExtensions;

use moduleNema\services\Dark;
use moduleNema\services\Rent;

class NemaTwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{
    public function getGlobals()
    {
        return array(
            'nema' => array(
                'dark' => new Dark(),
                'rent' => new Rent()
            )
        );
    }
}

Module.php

<?PHP

namespace moduleNema;

use moduleNema\twigExtensions\NemaTwigExtension as NemaTwigExtension;
use Craft;
use craft\services\Elements;
use yii\base\Event;

class Module extends \yii\base\Module
{
    public function init()
    {
        parent::init();

        Event::on(Elements::class, Elements::EVENT_AFTER_SAVE_ELEMENT, function(Event $event) {
        
        });
        
        if (Craft::$app->request->getIsSiteRequest()) {
            // Add in our Twig extension
            $extension = new NemaTwigExtension();
            Craft::$app->view->registerTwigExtension($extension);
        }        
    }
}

Composer配置

"autoload": {
    "psr-4": {
      "modules\\": "modules/",
      "moduleNema\\": "modules/moduleNema"
    },
},

解决步骤

1. 修正Composer命名空间映射路径

当前Composer配置中moduleNema指向的路径是modules/moduleNema,但实际目录是modules/modulesNema(多了一个s),修改配置为:

"autoload": {
    "psr-4": {
      "modules\\": "modules/",
      "moduleNema\\": "modules/modulesNema"
    },
},

2. 修正类文件名与类名匹配

PSR-4要求类文件名必须与类名完全一致,当前类名为NemaTwigExtension,但文件名是NemaTwigExtensions.php(多了一个s),将文件名改为NemaTwigExtension.php。

3. 重新生成自动加载文件

执行以下命令更新Composer自动加载缓存:

composer dump-autoload -o

原因说明

Composer 1.x对PSR-4规范的检查较为宽松,部分不匹配的情况不会触发错误;而Composer 2.x严格执行PSR-4标准,目录与命名空间映射、文件名与类名的不一致都会导致自动加载失败。

内容的提问来源于stack exchange,提问作者Ledif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:54:28