0

I'm new to slim. I ran into an error telling me the callable controller does not exist. However my other controller (HomeController) does work. I'm sure I am doing something stupid but I can't figure out what.

Error Message

Type: RuntimeException
Message: Callable JoeyD473\RPG_Tools\controllers\traveller\UniverseCreationControllercreateUniverse does not exist
File: C:\Users\Joey\Web\JRD_Traveller_Tools\vendor\slim\slim\Slim\CallableResolver.php

Line: 90

Project Structure

\public
    index.php
    .htaccess
\src
    \app
        \controllers
            BaseController.php
            HomeController.php
            \traveller
                UniverseCreationController.php
        \model
        \views
         config.php
         container.php
         routes.php

composer.json

"autoload": {
    "psr-4": {
        "JoeyD473\\RPG_Tools\\models\\": "src/app/model",
        "JoeyD473\\RPG_Tools\\controllers\\": "src/app/controllers"
    }
},

container.php

$container = $app->getContainer();

$container['view'] = new \Slim\Views\PhpRenderer(APP.'views/');

$container['db'] = function($c){
    $settings = $c->get('settings')['db'];

    $db = new \Aura\Sql\ExtendedPdo($settings['vendor'].':host='.$settings['host'].';dbname='.$settings['db_name'],$settings['username'],$settings['password']);

    return $db;
};

$container['HomeController'] = function($container){
    return new \JoeyD473\RPG_Tools\controllers\HomeController;
};

$container['UniverseCreationController'] = function($container){
    return new \JoeyD473\RPG_Tools\controllers\traveller\UniverseCreationController;
};

routes.php

$app->get('/',JoeyD473\RPG_Tools\controllers\HomeController::class.':home');

$app->get('/api',JoeyD473\RPG_Tools\controllers\HomeController::class.':sw_api');

$app->get('/temp',JoeyD473\RPG_Tools\controllers\HomeController::class.':temp');

$app->get('/universe/create_new_universe',JoeyD473\RPG_Tools\controllers\traveller\UniverseCreationController::class.'createUniverse');

UniverseCreationController.php

namespace JoeyD473\RPG_Tools\controllers\traveller;

use JoeyD473\RPG_Tools\controllers\BaseController;
use JoeyD473\RPG_Tools\models\traveller\universe\Universes;

class UniverseCreationController extends BaseController
{
    public function createUniverse($request,$response)
    {
        return $this->container->view->render($response,'travellers/universe/create_universe.phtml');
    }

    public function generateUniverse($request,$response)
    {
        $universe = new Universes($this->db);
        return 'generateSector';
    }
}
JoeyD473
  • 2,890
  • 2
  • 21
  • 25

1 Answers1

1

You've missed a colon (:) in your last route

\traveller\UniverseCreationController::class.'createUniverse');
                                           ^^^

You could also use the array syntax for this.

[YourClass::class, 'yourMethod']
jmattheis
  • 10,494
  • 11
  • 46
  • 58