Автозагрузка Composer - Как получить классы, черты, интерфейсы из разных папок?

0

Как я могу использовать автозагрузку композитора для извлечения классов, черт, интерфейсов из разных папок?

Некоторые из них я использую пространства имен, например,

Контроллер /foo.php,

namespace MyNamespace;
class Foo
{
    public $message = 'hello Foo';
}

модель /Boo.php

namespace MyNamespace;
class Boo
{
    public $message = 'hello Boo';
}

index.php,

// Composer.
require 'vendor/autoload.php';

use \MyNamespace\Foo;
$Foo = new Foo();
var_dump($Foo);

ошибка,

Неустранимая ошибка: класс 'MyNamespace\Foo' не найден в C:...

composer.json,

{
    "autoload": {
        "psr-0": {
            "": "ext/",
            "": "controller/",
            "": "model/" 
        }
    }
}

У меня много классов во многих разных папках (он может расширяться), так есть ли какой-либо способ без повторной установки автозагрузки композитора, когда у меня есть новые классы в новой папке?

Теги:
namespaces
composer-php
autoloader

1 ответ

1
Лучший ответ

Вы должны стандартизировать структуру пространств имен и папок. Если у вас одинаковое пространство имен в разных папках, сложнее создать простую логику, чтобы автоматически загрузить их. Попробуйте использовать другой сегмент в вашем пространстве имен, например:

namespace MyNamespace\Controller;
class Foo
{
    public $message = 'hello Foo';
}

а также:

namespace MyNamespace\Model;
class Boo
{
    public $message = 'hello Boo';
}

и в вашем composer.json:

{
    //..
    "autoload": {
        "psr-4": {
             "MyNamespace\\Model\\": "/path/to/model/folder/",
             "MyNamespace\\Controller\\": "/path/to/controller/folder/"
        }
    }
}

после его установки вызовите:

composer dump-autoload
  • 0
    Спасибо за ответ. оно работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню