Почему автозагрузка композитора не работает с контейнерами MacOS Docker? - PullRequest
0 голосов
/ 18 февраля 2019

Структура файла выглядит следующим образом:

index.php
composer.json
composer.lock
-lib
--books
---SearchClient.php (contains class books\SearchClient

В Windows работает следующий docker-compose.yml + PHP:

{
    "name"             : "keithdavis/books",
    "description"      : "",
    "version"          : "0.1",
    "minimum-stability": "beta",
    "require"          : {
        "ext-curl"         : "*",
        "ext-json"         : "*",
        "guzzlehttp/guzzle": "^6.3"
    },
    "autoload"         : {
        "psr-4": {
            "books\\": "lib"
        }
    }
}
<?php

use books\SearchClient;

require_once __DIR__."/vendor/autoload.php";
$oSearchClient = new SearchClient();

Однако в macOS (Mojave):

( ! ) Fatal error: Uncaught Error: Class 'books\SearchClient' not found in /var/www/html/search.php on line 6
( ! ) Error: Class 'books\SearchClient' not found in /var/www/html/search.php on line 6
Call Stack
#   Time    Memory  Function    Location
1   0.0032  416944  {main}( )   .../search.php:0

При отладке кажется, что путь "lib" является проблемой, но я пробовал "/ lib", и это тоже не работает.Я думаю, может быть, я неправильно установил Composer.Я опытный PHP-разработчик для Windows, но относительно новичок в Mac, и поэтому я не на 100% уверен в лучшем способе установки Composer на Mac.Я следовал этим инструкциям по всему миру:

https://getcomposer.org/doc/00-intro.md#globally

1 Ответ

0 голосов
/ 19 февраля 2019

Если посмотреть на структуру вашего файла, пространство имен для вашего класса клиента поиска должно быть равно namespace books\books;

Это потому, что вы устанавливаете книгу пространства имен в папке lib.Вместо того, чтобы дважды использовать книгу в пространстве имен, вы можете указать автозагрузчику прямо на папку книги, добавив

{
    "name"             : "keithdavis/books",
    "description"      : "",
    "version"          : "0.1",
    "minimum-stability": "beta",
    "require"          : {
        "ext-curl"         : "*",
        "ext-json"         : "*",
        "guzzlehttp/guzzle": "^6.3"
    },
    "autoload"         : {
        "psr-4": {
            "books\\": "lib/books"
        }
    }
}

. Убедитесь, что вы запускаете composer dumpautoload при изменении автозагрузки, чтобы перестроить пространства имен.

Надеюсь, это поможет.

...