繁体   English   中英

未找到Composer自动加载类psr4

[英]Composer autoload not found classes psr4

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

这是我的项目结构

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

的index.php

<?php

namespace ink;

require ( vendor/autoload.php );

use ink\src\classes\MyClass\MyClass;

$customclasse = new MyClass();

MyClass.php

<?php

namespace ink\src\classes\MyClass;

class MyClass {

     public function __construct(){
     }
}

composer.json

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

我做错了什么? 当我需要MyClass.php时,命名空间似乎是很好的原因,一切正常,类已加载。

谢谢

首先,您似乎没有遵守PSR-4规范。

按照规范说:

完全限定的类名称具有以下形式:

\\ NamespaceName(\\ SubNamespaceNames)* \\类名

资料夹结构

├── 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 Ink\Classes\Models\MyClass;

$customclasse = new MyClass();

?>

composer.json

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

MyClass.php

<?php 

namespace Ink\Classes\Models;

class MyClass {

     public function __construct(){
     }
}

您正在将src级别加倍。

通过ink\\\\ : src你说什么后ink是在src文件夹中。

但是您的类位于ink\\src\\classes\\MyClass命名空间中。

因此,这加起来为src + src/classes/MyClass = src/src/classes/MyClass路径。

因此,您可能需要:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM