2015-01-08 4 views
0

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

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

Контроллер/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); 

ошибка,

Fatal error: Class 'MyNamespace\Foo' not found in C:...

composer.json,

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

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

ответ

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

благодарит за ответ. оно работает! – laukok