作曲家自动加载未找到类PSR4



我尝试使用作曲家加载位于特定文件夹中的自定义类。

这是我的项目结构

public
|—index.php
src
|—classes
    |— MyClass
          |— MyClass.php
vendor
|—autoload.php
composer.json

index.php

<?php
namespace ink;
require ( vendor/autoload.php );
use inksrcclassesMyClassMyClass;
$customclasse = new MyClass();

myclass.php

<?php
namespace inksrcclassesMyClass;
class MyClass {
     public function __construct(){
     }
}

composer.json

{
    autoload : {
        psr-4 : {
            ink\ : src 
        }
    }
}

我做错了什么?当我需要myClass.php时,名称空间似乎很好,一切正常,课程都加载。

谢谢

首先,似乎您不尊重PSR-4规格。

根据规范说:

完全合格的类名称具有以下形式:

namespaceName( subnamespaceNames)* className

文件夹结构

├── composer.json
├── public
│   └── index.php
├── src
│   └── Classes
│       └── Models
│           └── MyClass.php
└── vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── ClassLoader.php
        └── LICENSE

index.php

<?php
require '../vendor/autoload.php';
use InkClassesModelsMyClass;
$customclasse = new MyClass();
?>

composer.json

{
    "name": "app",
    "type": "project",
    "description": "app",
    "autoload": {
        "psr-4": { "Ink\": "src/" }
    }
}

myclass.php

<?php 
namespace InkClassesModels;
class MyClass {
     public function __construct(){
     }
}

您正在加倍src级别。

ink\ : src您说的是ink之后的任何内容在src文件夹中。

但是您的课程在inksrcclassesMyClass名称空间中。

因此,这加起来可以 src src/classes/MyClass = src/src/classes/MyClass路径。

所以您可能需要:

{
    autoload : {
        psr-4 : {
            ink\src\ : src 
        }
    }
}

最新更新