Ну, не уверен, что это кому-то еще интересно, но я решил эту проблему, отладив некоторые классы CodeIgniter 4. В основном BaseService::locator и FileLocator::search.
Я заметил, что CodeIgniter искал языковой путь, добавляя пространство имен перед ним, и перебирал все каталоги и пространства имен, которые были загружены автоматически.
Вот один пример для ясности вывода
/var/www/html/app/Config/Helpers/url_helper.php
/var/www/html/modules/admin/Helpers/url_helper.php
/var/www/html/modules/install/Helpers/url_helper.php
/var/www/html/modules/lobby/Helpers/url_helper.php
/var/www/html/system/Helpers/url_helper.php
/var/www/html/app/Config/Registrar.php
/var/www/html/app/Config/Config/Registrar.php
/var/www/html/modules/admin/Config/Registrar.php
/var/www/html/modules/install/Config/Registrar.php
/var/www/html/modules/lobby/Config/Registrar.php
/var/www/html/system/Config/Registrar.php
/var/www/html/app/Config/Events.php
/var/www/html/app/Config/Config/Events.php
/var/www/html/modules/admin/Config/Events.php
/var/www/html/modules/install/Config/Events.php
/var/www/html/modules/lobby/Config/Events.php
/var/www/html/system/Config/Events.php
/var/www/html/app/Config/Routes.php
/var/www/html/app/Config/Config/Routes.php
/var/www/html/modules/admin/Config/Routes.php
/var/www/html/modules/install/Config/Routes.php
/var/www/html/modules/lobby/Config/Routes.php
/var/www/html/system/Config/Routes.php
Как только я понял правильную процедуру, я смог правильно изменить файл app/Config/Autoload.php.
Вот как это выглядит
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Modules\Admin' => ROOTPATH . 'modules/admin',
'Modules\Game' => ROOTPATH . 'modules/install',
'Modules\Lobby' => ROOTPATH . 'modules/lobby',
];
После того, как я это сделал, следующие URL-адреса были добавлены в список выше.
/var/www/html/app/Language/en/home/home_lang.php
/var/www/html/app/Config/Language/en/home/home_lang.php
/var/www/html/modules/admin/Language/en/home/home_lang.php
/var/www/html/modules/install/Language/en/home/home_lang.php
/var/www/html/modules/lobby/Language/en/home/home_lang.php
/var/www/html/system/Language/en/home/home_lang.php
Я не стал исследовать дальше, поэтому понятия не имею, почему CodeIgniter не рассматривает что-то вроде этого:
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Modules' => ROOTPATH . 'modules',
];
Я ожидал, что фреймворк будет исследовать все каталоги внутри него, но я думаю, что он ограничен всего одним уровнем вниз.
Наконец, это моя структура каталогов:
- приложение
- публичный
- система
- доступный для записи
- modules
Итак, мой совет состоит в двух вещах:
- Поместите свои модули вне папки приложения, как предлагает документация CI.
- Явно сообщите CI, где находятся ваши модули.
person
Lucas
schedule
29.10.2020