Можно ли задать другую папку и другой namespace для контроллеров?

У меня контроллеры должны распологаться так

root
|
-- src
|  |
|  -- presentation
|     |
|     --- controllers
|         |
|         -- public
|              SiteController.php
|         -- directory
|              SomeController.php
|
-- migrations
-- vendor
-- ...

Как можно сделать так, чтобы в контроллерах и вообще в классах папки src использовать неймспейс например presentation/controllers/public/presentation/controllers/directory без указания src и app в пути И при этом чтобы приложение знало, что они именно в src?

Если в конфиге прописать 'controllerNamespace' => 'app\src\presentation\controllers', а в контроллерах namespace app\src\presentation\controllers\public; всё работает. Но мне не нравится это app\src и src.

Если добавлять 'controllerPath' => 'app\src\presentation\controllers', - то это не работает. Я вообще не знаю зачем оно нужно, потому что оно, как я понял, давно readOnly.


Ответы (1 шт):

Автор решения: Сергей Мишин

Скорее всего это можно сделать через назначение autoload в composer (https://getcomposer.org/doc/04-schema.md#autoload)

Получится примерно так:

{
    "autoload": {
        "psr-4": {
            "app\\presentation\\controllers\\": "/src",
        }
    }
}

Тогда можно использовать namespace app\presentation\controllers

А можно в конфиге дописать basePath:

'basePath' => dirname(__DIR__) . '/src',

и оставить 'controllerNamespace' => 'app\presentation\controllers',

и тоже будет необходимый namespace app\presentation\controllers

→ Ссылка