ключ автозагрузки psr-4 для определения соответствия между пространствами имен и путями, не работающими для одного пространства имен - PullRequest
0 голосов
/ 28 мая 2019

Используя блок автозагрузки composer.json psr4, я определил отображение из пространств имен в пути

"autoload": {
    "psr-4": {
        "SuiteCRM\\": [
            "lib/",
            "include/",
            "tests/SuiteCRM/",
            "tests/unit/lib/SuiteCRM/"
        ],
        "SuiteCRM\\Custom\\": [
            "custom/lib"
        ],
        "Company\\Client\\Webpower\\": "custom/wpclient/src",
        "Company\\Client\\Repositories\\": "custom/repositories/src"
    },
    "classmap": [
        "Api/"
    ]
}

Я определил строки

"Company\\Client\\Webpower\\": "custom/wpclient/src",
"Company\\Client\\Repositories\\": "custom/repositories/src"

Структура и расположение упаковки:

/custom
    /wpclient
        /src
            - Auth.php
            - Client.php
            - Helper.php
            - Contact.php

Структура пакета, который не может быть создан

/custom
    /repositories
        /src
            - ContactRepository.php

Все классы в пути / custom / wpclient / src имеют это пространство имен

namespace Company\Client\Webpower;

И файл в пути / custom / repositories / src имеет это пространство имен

namespace Company\Client\ContactRepository;

Когда я использую классы, сценарий прерывается при создании ContactRepository экземпляра

<?php

require_once 'vendor/autoload.php';

use Company\Client\Repositories\ContactRepository; // Here the script is interrupted
use Company\Client\Webpower;

$contactRepository = new ContactRepository();
$contact = new Contact();

Если я удаляю строку $contactRepository = new ContactRepository(); и пытаюсь просто набрать $contact = new Contact();, экземпляр контакта создается, как и ожидалось.

В чем причина того, что при создании экземпляра класса ContactRepository сценарий прерывается?

Я заметил, что phpstorm при определении импорта делает это таким образом, использует Company\Client\Repositories\ContactRepository;, тогда как для Contact это делает так использует Company \ Client \ Webpower; I не знаю, относится ли это к делу, но я замечаю, что оно отличается от других и имеет похожее пространство имен.

Спасибо за ваш совет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...