Композитор автозагрузка не найдены классы psr4 - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь использовать 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, все работает нормально, класс загружается.

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Прежде всего, кажется, что вы не соблюдаете спецификацию 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(){
     }
}
0 голосов
/ 22 февраля 2019

Вы удваиваете уровень src.

Под ink\\ : src вы говорите, что все, что после ink находится в папке src.

Но ваш классв ink\src\classes\MyClass пространствах имен.

Таким образом, это составляет в целом src + src/classes/MyClass = src/src/classes/MyClass путь.

Так что вам, вероятно, понадобится:

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