Welcome Guest, Not a member yet? Register   Sign In
Routing to a module adds App\Controllers to the route
#1
Question 

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
Reply
#2

PHP Code:
'Modules\admin'    => ROOTPATH 'modules\admin',

// should be
'Modules\admin'    => ROOTPATH 'modules/admin'
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#3

Read https://codeigniter4.github.io/CodeIgnit...-namespace
Reply
#4

Apologies for the late reply. Only getting to this now.

Thanks, the two answers combined to give me success.
Reply




Theme © iAndrew 2016 - Forum software by © MyBB