I need a little help to get a module to load correctly.
My problem is that the handler generated for my defined route seems to prefix
App\Controllers to the route in the module folder
My Directory Structure is as follows:
Code:
├── app
│ ├── Config
│ ├── Controllers
│ ├── ...All the other CI4 folders
├── modules
│ ├── admin
│ │ ├── Config
│ │ ├── Controllers
│ │ ├── Models
│ │ ├── Views
\app\Config\Autoload.php
PHP Code:
<?php
namespace Config;
use CodeIgniter\Config\AutoloadConfig;
class Autoload extends AutoloadConfig
{
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Modules' => ROOTPATH . 'modules',
'Modules\admin' => ROOTPATH . 'modules\admin',
];
public $classmap = [];
public $files = [];
public $helpers = [];
}
\app\Config\Routes.php
PHP Code:
<?php
namespace Config;
$routes = Services::routes();
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->get('/', 'Home::index');
$routes->get('/reachability', 'Reachability::index');
if (is_file(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) {
require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}
foreach(glob(ROOTPATH . 'modules/*', GLOB_ONLYDIR) as $item_dir) {
if(file_exists($item_dir . '/Config/Routes.php')) {
require_once($item_dir . '/Config/Routes.php');
}
}
\modules\admin\Config\Routes.php
PHP Code:
<?php
$routes->get('/admin', 'Modules\admin\Controllers\User::validate');
\modules\admin\Controllers\User.php
PHP Code:
<?php
namespace Modules\admin\Controllers
class User extends \CodeIgniter\Controller {
public function validate() {
echo "The validate admin user page";
}
}
In the CI4 debug toolbar from
http://localhost:8080/ (and
http://localhost:8080/reachability):
Code:
MATCHED ROUTE
Directory:
Controller: \App\Controllers\Home
Method: index
Params: 0 / 0
DEFINED ROUTES
Method Route Handler
GET / \App\Controllers\Home::index
GET reachability \App\Controllers\Reachability::index
GET admin \App\Controllers\Modules\admin\Controllers\User::validate
From
http://localhost:8080/admin I only get a 404 error:
Controller or its method is not found: \App\Controllers\Modules\admin\Controllers\User::validate
I do not get a CI4 debug toolbar icon on this url.
I suspect it is something I don't understand about namespaces. I am new to CI.
Thank you for any assistance