композитор - тестирование созданного пакета - класс не найден

Я пытаюсь создать пакет Hello world с композитором из этого руководства.

http://grossi.io/2013/creating-your-first-composer-packagist-package/

Каким-то образом мне удалось создать и протестировать его полдня назад, но теперь в другом каталоге я пробовал еще несколько раз - не могу заставить его работать и не понимаю, почему я получаю ошибку, которую я покажу позже.

Вот что я делаю:

В каталоге HelloWorld я создаю каталог src. В каталоге src я помещаю файл SayHello.php

namespace HelloWorld;

class SayHello
{
    public static function world()
    {
        return 'Hello World, Composer!';
    }
}

Бежать

composer init

После того, как он создает файл composer.json, я редактирую, и в итоге он такой:

{
    "name": "vagrant/hello-world",
    "description": "test",
    "license": "no",
    "authors": [
        {
            "name": "darius",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-0": {
            "HelloWorld": "src/"
        }
    }
}

Затем я бегу

composer install

Я получаю вывод:

Loading composer repositories with package information
Installing dependencies (including require-dev)
Nothing to install or update
Generating autoload files

Учебник говорит

Установленный Composer создает каталог «тесты» внутри вашего корневого каталога.

Но я не вижу такого каталога, поэтому создаю его сам в каталоге HelloWorld. Возможно, автор что-то пропустил, чтобы добавить.

Затем я создаю файл test.php

require_once __DIR__ . '/../vendor/autoload.php'; // Autoload files using Composer autoload

use HelloWorld\SayHello;

echo SayHello::world();

Бежать:

php tests/test.php

И получить:

Неустранимая ошибка PHP: класс «HelloWorld\SayHello» не найден в /home/vagrant/package_dev/workbench/oitlabs/HelloWorld/tests/test.php в строке 7

Как он теперь может это увидеть? Я попытался добавить в test.php

require_once __DIR__ . '/../src/SayHello.php';

то видит и работает, значит должен видеть файл. Так что это похоже на то, что композитор генерирует неправильный файл автозагрузки или что-то в этом роде. Как я могу отладить это?

Также попробовал те же шаги в другом каталоге, рядом с тем, который мне в первый раз удалось, просто используя пространство имен Hello. Та же ошибка.

Вот еще файл - как выглядит мой пакет, что сгенерировал композитор: http://www58.zippyshare.com/v/Hsfg4pVf/file.html


person Dariux    schedule 20.01.2015    source источник


Ответы (1)


Проблема заключалась в том, что мне нужно было иметь каталог «HelloWorld» в каталоге src.

Таким образом, структура папок будет выглядеть так:

Root
  src
      HelloWorld
            SayHello.php
  tests
      test.php
  vendor
  composer.json
person Dariux    schedule 21.01.2015
comment
Но любой, кто знает более быстрый способ отладки структур каталогов и пространств имен, может рассказать :) - person Dariux; 21.01.2015
comment
Обязательно ли создавать каталог test?? - person Jabaa; 10.03.2017
comment
@Jabaa - наверное, нет, но это полезно. Обычно у вас должны быть автоматические тесты. А также при разработке вам не нужно использовать реальный проект в качестве среды тестирования. Вы запускаете свои тесты из этого каталога и знаете, реализовали ли вы функциональность или нет. - person Dariux; 11.03.2017