Классы автозапуска Composer не найдены

у меня есть структура папок, как:

includes/
  libraries/
    Classes/
      Contact/
        Contact.php
        ContactController.php

admin/
  controllers/
    contact/
      edit.php

контакты.php-это мой класс, который я пытаюсь использовать. Файл содержит.

<?php
namespace Classes;

class Contact {
    function __construct() {
        die('here');
    }
}

у меня есть мой композитор.файл json, например:

{
    "autoload": {
        "psr-4": {
            "Classes": "includes/libraries/Classes/"
        }
    },
}

файл, в котором я пытаюсь использовать класс Contact, это edit.php внутри admin/controllers/contact/ папка. Мой edit.php файл выглядит так:

<?php

use ClassesContact;

$contact = new Contact();

var_dump($contact);

этот файл vendor/autoload.php файл включен, но я не могу заставить его использовать класс?

1 ответов


Classes/Contact/Contact.php и правило композитора "Classes\": "includes/libraries/Classes/" означает Classes\Contact\Contact класса, а не Classes\Contact.

так что если вы действительно хотите Classes\Contact класс, переместите Classes/Contact/Contact.php файл до родительского каталога:Classes/Contact.php.

Если, однако, желаемый путь пространства имен к классу Classes\Contact\Contact, затем измените use:

use Classes\Contact\Contact;

и namespace:

namespace Classes\Contact;

class Contact {}

пример

├── composer.json
├── includes
│   └── libraries
│       └── Classes
│           └── Contact
│               └── Contact.php
├── test.php
└── vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── autoload_static.php
        ├── ClassLoader.php
        ├── installed.json
        └── LICENSE

файлы vendor/ создаются композитор.

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

{
    "name": "testpsr4",
    "autoload": {
        "psr-4": {
            "Classes\": "includes/libraries/Classes"
        }
    }
}