2015-04-27 1 views
0

я должен добиться того, чтобы все источники inclueded как этотPSR-4 изменения рабочих примеров не работают

$instance = new \d1\d2\d3\app\MyClass();

Где d1 \ d2 \ d3 \ указывает на корневой каталог.

Я прочитал основы на https://getcomposer.org/doc/04-schema.md#psr-4 и http://www.php-fig.org/psr/psr-4/. Пример для https://laracasts.com/lessons/psr-4-autoloading также работает для меня.

Моя проблема: скоро, когда я немного изменил код ниже моих потребностей, класс больше не найден. (Да, я делаю команду composer update после изменений в composer.json. И да, я обновил композитор, используя самообновление).

Так это работает:

composer.json

"autoload": { "psr-4": {
"Laracasts\\": "app/Laracasts" } }

index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \Laracasts\Repositories\BlogRepository(); $test->hello();

Но это does'nt:

composer.json

"autoload": { "psr-4": {
"d1\\": "app/Laracasts" } }

index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \d1\Repositories\BlogRepository(); $test->hello();

Что я делаю неправильно?

Я использую PHP 5.3.28 с IIS 8.

+0

Путь к классу BlogRepository - это приложение \ Laracasts \ Repositories \ BlogRepository.php –

ответ

0

Решено!

Проблема заключалась в том, что префикс, используемый в composer.json ('d1' в этом случае), также должен использоваться как префикс пространства имен в классе, который должен быть включен. И это было не так, когда я опубликовал предыдущий пост.

Для неработающего приведенном выше примере для работы файлов должны выглядеть в случае 'd1':

приложения \ Laracasts \ Хранилище \ BlogRepository.php

namespace d1\Repositories; class BlogRepository { public function hello(){ echo 'hello from a non-root dir!'; } }

index.php

require_once 'vendor/autoload.php'; $test = new \d1\Repositories\BlogRepository(); $test->hello();

композитор.JSON

{ "autoload": { "psr-4": { "d1\\": "app/Laracasts" } } }

добиться того, что d1 \ d2 \ d3 \ указывает на корневой каталог, мы должны настроить префикс во всех 3-х файлов, упомянутых выше, и переместить файл с классом в корневой каталог. Затем мы скорректируем композитор.json вот так: "d1\\d2\\d3\\": ""