ผู้แต่ง - การทดสอบแพ็คเกจที่สร้าง - ไม่พบคลาส

ฉันกำลังพยายามสร้างแพ็คเกจ 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

บทช่วยสอนกล่าวว่า

นักแต่งเพลงที่ติดตั้งสร้างไดเร็กทอรี "tests" ภายใน root dir ของคุณ

แต่ฉันไม่เห็นไดเร็กทอรีดังกล่าว ดังนั้นฉันจึงสร้างมันขึ้นมาเองในไดเร็กทอรี 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