Автозагрузка Composer - Как получить классы, черты, интерфейсы из разных папок?
Как я могу использовать автозагрузку composer для извлечения классов, черт, интерфейсов из разных папок?
Некоторые из них я использую пространства имен, такие как,
Контроллер / 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/"
}
}
}
У меня есть много классов во многих разных папках (они могут расширяться), поэтому есть ли способ без переустановки автозагрузки composer, когда у меня новые классы в новой папке?
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