【问题标题】:Composer autoload not found classes psr4Composer 自动加载未找到类 psr4
【发布时间】:2019-02-23 01:52:12
【问题描述】:

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

这是我的项目结构

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

索引.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 时,命名空间似乎很好,一切正常,类已加载。

谢谢

【问题讨论】:

  • 你得到的错误是什么?
  • 类 MyClass 未找到
  • 你生成了 autoload.php 吗?
  • 我也使用过 composer install, update, dump-autoload

标签: php composer-php autoload


【解决方案1】:

首先,您似乎没有遵守 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 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(){
     }
}

【讨论】:

    【解决方案2】:

    您将src 等级加倍。

    ink\\ : src 你是说ink 之后的所有内容都在src 文件夹中。

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

    所以这加起来就是src+src/classes/MyClass=src/src/classes/MyClass 路径。

    所以你可能需要:

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

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2016-12-08
      • 2023-01-24
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      相关资源
      最近更新 更多