Автозагрузка Composer не работает независимо от того, что я делаю - PullRequest
0 голосов
/ 08 октября 2019

У меня есть проект, и мне нужны некоторые пакеты, поэтому я реорганизовал проект для использования PSR-4.

Вот мой composer.json:

{
    "name": "me/production",
    "type": "project",
    "authors": [
        {
            "name": "Me",
            "email": "me@me.com"
        }
    ],

    "config": {
        "platform": {
            "php": "5.6.1"
        }
    },
    "autoload": {
      "psr-4": {
        "API\\": "api/"
      }
    },

    "require": {
        "nesbot/carbon": "^2.25"
    },

}

это не работает в моих сценариях. Но вот настоящий кикер: я делаю require_once __DIR__ . '/vendor/autoload.php'; в своей консоли php, и это тоже не работает. Я трижды и четверно проверил путь, автозагрузка есть.

Что я подразумеваю под "не работает"? автозагрузка требуется успешно. Это позволяет мне использовать библиотеки. НО фактические экземпляры приводят к ошибке

Class not found.

Не только для моих классов в пространстве имен API, которые расположены в верхней части файла. и точно находятся в папке, которой они должны быть, но я также НЕ МОГУ создать экземпляр Carbon. Я могу use Carbon\Carbon, но любая попытка создания экземпляра потерпит неудачу.

Интересно, что создание экземпляра \Carbon\Carbon напрямую не завершится неудачей.

Что происходит? Это странно.

Заранее спасибо.

РЕДАКТИРОВАТЬ: я попытался уменьшить загрузчик, я также попытался удалить папку поставщика и переустановить. Все безрезультатно.

РЕДАКТИРОВАТЬ: Может быть, стоит упомянуть, я снизил углерод до ^ 1,21, потому что углерод 2 не поддерживает php 5.6. Но это все еще не работает.

РЕДАКТИРОВАТЬ: Это происходит и с моим пространством имен API, вот пример использования моей реализации API Instagram:

 use \API\Insta;
php > var_dump(new Insta);
PHP Fatal error:  Class 'Insta' not found in php shell code on line 1
php > var_dump(new \API\Insta);
object(API\Insta)#3 (1) {
  ["ig_token"]=>
  string(51) "A_VALID_TOKEN"
}
php > 

РЕДАКТИРОВАТЬ: проблема решенасам по себе он теперь мутировал в один, который меня мало волнует: я могу использовать все, но не в консоли php. Я не уверен, что это исправило.

1 Ответ

0 голосов
/ 08 октября 2019

Как вы узнали, для nesbot / carbon версии 2.25 требуется как минимум PHP v7.1.8.

Наличие оператора use ничего не проверяет, а создает локальный псевдоним, который можно использовать. Если вы попытаетесь использовать что-то, чего не существует, то только тогда это не получится.

Пожалуйста, уточните, что у вас есть следующая структура каталогов:

  • . / Composer.json
  • . / Composer.lock
  • . / Api / Insta.php

и в файле Api / Insta.php:

namespace API;  // this is your top namespace name
use Carbon/Carbon; // etc
class Insta { ... }

Наличие пространства имен, отличного от имени каталога, может привести к путанице.

Также будет файл index.php / front-controller, который извлекает файл vendor / autoload.php и предположительно запускаетоснова.

...