Composer 生成大小写错误的命名空间

Posted

技术标签:

【中文标题】Composer 生成大小写错误的命名空间【英文标题】:Composer generates incorrectly capitalized namespaces 【发布时间】:2016-07-04 17:34:56 【问题描述】:

拉入自制composer包时,拉入的文件与源代码的命名空间大小写不同。


GitHub上的包源代码

来源composer.json代码:

"name": "bsapaka/metattribute",
"autoload": 
        "psr-4": 
            "Bsapaka\\Metattribute\\": "src/"
        
    ,

来源namespace:

namespace Bsapaka\Metattribute;


拉入项目from Packagist时出现的代码

composer在autoload_psr4.php中生成的行:

'bsapaka\\metattribute\\' => array($vendorDir . '/bsapaka/metattribute/src'),

出现在供应商文件中的命名空间:

namespace bsapaka\Metattribute;

尝试使用时的异常:

找不到类'bsapaka\Metattribute\AttributeList'


我已尝试更改源代码的大小写。全大写,全小写,一大一小等。每次psr4路径和类命名空间都不相同,异常依旧。

【问题讨论】:

【参考方案1】:

我删除了copy of your library 并创建了一个 PHPUnit 测试。我无法重现您的问题。看来你已经解决了?您现在使用的是namespace Bsapaka\Metattribute

Tests\AttributeTest.php:

<?php

class AttributeTest extends PHPUnit_Framework_TestCase

    public function testName()
    
        $attribute = new \Bsapaka\Metattribute\Attribute("Elvis");
        $this->assertEquals("Elvis", $attribute->getName());
    

为使上述内容生效,composer.json 现在包括:

"require-dev": 
    "phpunit/phpunit": "~4.0"

并通过:vendor/bin/phpunit tests/AttributeTest.php启动

【讨论】:

我这边还有问题...你是通过作曲家拉进来的吗? 是的。我不得不要求"bsapaka/matattribute": "dev-master",因为它有你更正的命名空间。 v1.0.0 仍然坏了:)

以上是关于Composer 生成大小写错误的命名空间的主要内容,如果未能解决你的问题,请参考以下文章

具有相同命名空间的不同 Composer 包

使用子命名空间自动加载我的类 (Composer.json)

thinkphp 5.0 命名空间

php Composer命名空间Autoload

thinkphp5.0命名空间

Composer 自动加载几个路径作为一个命名空间