Автозагрузчик Slim3 PSR-4

Я пишу Slim3 API, по какой-то причине slim не загружает пространство имен, определенное в композиторе.

Вот структура проекта.

Структура папки:

projectApi

 - composer.json
 - src
    - public
      - index.php
    - ProjectName
      - Api
        - Controllers
        - Entities
        - Commands

Мои пакеты файлов композитора и настройки автозагрузчика PSR-4.

composer.json

{
    "require": {
        "slim/slim": "^3.0",
        "symfony/yaml": "3.1",
        "symfony/console": "3.1",
        "symfony/process": "3.1",
        "doctrine/orm": "^2.5",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/doctrine-cache-bundle": "^1.2",
        "sabre/xml": "1.1.0",
        "php-di/php-di": "@dev",
        "php-amqplib/php-amqplib": "@dev",
        "ramsey/uuid": "dev-master",
        "monolog/monolog": "~1.15@dev",
        "predis/predis": "~1.0.1",
        "spipu/html2pdf": "^4.5",
        "iio/libmergepdf": "~3.0"
    },
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "src\\ProjectName\\": "src/ProjectName/"
        }
    },
    "autoload-dev": {
        "psr-4": { "src\\ProjectName\\Tests\\": "tests" }
    }
}

index.php

Контроллер категорий

namespace ProjectName\Api\Controllers;

class CategoryController
{

    /**
     * @param \Slim\App $app
     * @return array
     */
    public function index(\Slim\App $app)
    {
        return ['Cats', 'Cats2', 'Cats3'];
    }
}

** маршруты.php **

$app->get('/v1/category/list', function (Request $request, Response $response) {
    $response = $response->withHeader('Content-type', 'application/json');
    $categoryCtrl = new \ProjectName\Api\Controllers\CategoryController();
});

Slim не может загрузить пространство имен \ProjectName\Api\Controllers\CategoryController

любая идея, где и что происходит не так?

С уважением Данил Полезно Бесполезно


person danyal14    schedule 10.07.2017    source источник
comment
Я бы попытался изменить `psr-4: {src\\ProjectName\\: src/ProjectName/}` на `psr-4: {ProjectName\\: src/ProjectName/}`   -  person Eineki    schedule 10.07.2017
comment
Запустите composer dump-autoload -o и скажите, работает ли он?   -  person Shahroze Nawaz    schedule 10.07.2017


Ответы (1)


У вас есть неверные определения автозагрузчика в вашем файле composer.json.

Шаблон:

"psr-4": {
    "Namespace\\Prefix\\": "/path/to/source/root"
}

Так что в вашем случае это, вероятно, должно быть:

"autoload": {
    "psr-4": {
        "ProjectName\\": "src/ProjectName/"
    }
},
"autoload-dev": {
    "psr-4": { "ProjectName\\Tests\\": "tests/" }
}

autoload-dev предполагает, что в корневом пути проекта есть каталог tests, который не упоминается в вашем вопросе.

person Jakub Matczak    schedule 10.07.2017
comment
Вы правы, я добавил src в пространство имен. Теперь работает. спасибо за помощь. - person danyal14; 10.07.2017