Dan Chheng
Dan Chheng

Reputation: 17

Codeigniter4 - Controller or its method is not found: \App\Controllers\Startup::index

I'm trying to loading view by code below:

Controller:

<?php namespace App\Controllers;
use CodeIgniter\Controller;

class Startup extends Controller
{
   public function index()
   {
        return view('install/startup');
   }
}

Route:

$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Startup');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

When loading I've got 404 error message: Controller or its method is not found: \App\Controllers\Startup::index

please see image directory structure

Upvotes: 0

Views: 21535

Answers (1)

TimBrownlaw
TimBrownlaw

Reputation: 5507

From your image showing your folder structure, you have your Startup controller under a install folder, so you need to factor that in.

Your Startup Controller needs to be... (Note the namespace)

<?php
namespace App\Controllers\Install;
use CodeIgniter\Controller;

class Startup extends Controller {

    public function index() {
        return view('\App\Views\install\startup.php');
    }
}

And if you want to set this as your "default", your Routes need to be

$routes->setDefaultNamespace('App\Controllers\Install');
$routes->setDefaultController('Startup');

Note: No Route Definitions are set... I.E no $routes->get()... are defined

Namespace is your friend, so if you are going to put things under other folders you need to make your namespace values match.

UPDATE: Please NOTE. I have changed the Controllers/install folder to be Controllers/Install ( Using a Capital I for Install ). Case Matters...

So in your case you would use

$routes->setDefaultNamespace('App\Controllers\install'); // LOWER CASE install.
$routes->setDefaultController('Startup');

Case Matters.

Upvotes: 1

Related Questions