Hi.
In my CI projects, I created an event to detect which theme to show and then update the config('Paths')->viewDirectory variable
PHP Code:
Events::on('pre_system', static function ()
{
$configPath = config(Paths::class);
$configTema = config(AppTema::class);
// tema passato in GET (mi accerto esista il tema)
if ($tmp = \Config\Services::request()->getGet('tema'))
{
if (is_dir($configPath->viewDirectory .'/'. $configTema::admin_tpl .'/'. $tmp)) session()->set('tema_admin', $tmp);
if (is_dir($configPath->viewDirectory .'/'. $configTema::frontend_tpl .'/'. $tmp)) session()->set('tema_frontend', $tmp);
}
// imposto l'eventuale tema memorizzato in sessione
if (session()->has('tema_admin')) $configTema->admin_tema = session()->get('tema_admin');
if (session()->has('tema_frontend')) $configTema->frontend_tema = session()->get('tema_frontend');
define('TEMA_ADMIN', $configTema::admin_tpl .'/'. $configTema->admin_tema); // utile per ricerca moduli o estensione template
define('TEMA_FRONTEND', $configTema::frontend_tpl .'/'. $configTema->frontend_tema); // utile per ricerca moduli o estensione template
$configTema->asset_admin = site_url($configTema::admin_asset .'/'. $configTema->admin_tema);
$configTema->asset_frontend = site_url($configTema::frontend_asset .'/'. $configTema->frontend_tema);
// capisco se mostrare il template di admin o di frontend
if (url_is(SEGMENTURL_ADMIN.'*') || url_is('login*'))
{
$configPath->viewDirectory .= '/'. TEMA_ADMIN .'/';
$configTema->asset = site_url($configTema::admin_asset .'/'. $configTema->admin_tema);
}
else
{
$configPath->viewDirectory .= '/'. TEMA_FRONTEND .'/';
$configTema->asset = site_url($configTema::frontend_asset .'/'. $configTema->frontend_tema);
}
});
I upgraded one of my projects to CI version v4.3.7 and this code stopped working.
I debugged and noticed that in the \codeigniter\system\Config\Services.php file, line 483 was replaced withÂ
PHP Code:
$viewPath = $viewPath ?: (new Paths())->viewDirectory;
(old version $viewPath = $viewPath ?: config('Paths')->viewDirectory)
This change effectively undoes my work in Events because Path is reinitialized.
How can I solve this problem?
Thanks