My src/routes.php
<?php
// Routes
require __DIR__ . '/../app/modules/routes.php';
/*
$app->get('/[{route:.*}]', function (Request $request, Response $response, array $args) {
// @TODO: Move logic to the RoutesController.
//$route = explode('/', $request->getAttribute('route'));
// Sample log message
$this->logger->info("Slim-Skeleton 'universal' route");
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
});
*/
$app->any('/[{route:.*}]', 'RoutesController');
/*
$app->get('/test', function (Request $request, Response $response, array $args) {
// Sample log message
$this->logger->info("Slim-Skeleton '/' route");
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
});
*/
My app/modules/routes.php
<?php
$modules = get_available_modules($app);
foreach ($modules as $module) {
if (is_module_present($module)) {
require_once $module . '/routes.php';
}
}
This will find that the blog module is present and then it calls app/modules/blog/routes.php
<?php
$app->get('/blog', 'PageController:index');
But if I’ll go to http://localhost:8080/blog it will show
Slim Application Error
The application could not run because of the following error:
Details
Type: RuntimeException
Message: Callable PageController does not exist
File: /home/erwin/Work/silvia/vendor/slim/slim/Slim/CallableResolver.php
Line: 90
Trace
#0 /home/erwin/Work/silvia/vendor/slim/slim/Slim/CallableResolver.php(61): Slim\CallableResolver->resolveCallable('PageController', 'index')
#1 /home/erwin/Work/silvia/vendor/slim/slim/Slim/CallableResolverAwareTrait.php(45): Slim\CallableResolver->resolve('PageController:...')
#2 /home/erwin/Work/silvia/vendor/slim/slim/Slim/Route.php(333): Slim\Routable->resolveCallable('PageController:...')
#3 /home/erwin/Work/silvia/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 /home/erwin/Work/silvia/vendor/slim/slim/Slim/Route.php(316): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 /home/erwin/Work/silvia/vendor/slim/slim/Slim/App.php(476): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 /home/erwin/Work/silvia/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 /home/erwin/Work/silvia/vendor/slim/slim/Slim/App.php(370): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#8 /home/erwin/Work/silvia/vendor/slim/slim/Slim/App.php(295): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#9 /home/erwin/Work/silvia/public/index.php(35): Slim\App->run()
#10 {main}
But the PageController exists in app/modules/blog/controllers/PageController.class.php
<?php
namespace Scr\Controllers;
use Slim;
use Slim\Http\Request;
use Slim\Http\Response;
use Monolog;
class PageController
{
/** @var Slim\Container $container */
protected $container;
/** @var Monolog\Logger $logger */
protected $logger;
/** @var Slim\Views\PhpRenderer $view */
protected $view;
function __construct(Slim\Container $container) {
$this->container = $container;
$this->logger = $container->logger;
$this->view = $container->renderer;
// Sample log message
$this->logger->info("Slim-Skeleton '/blog' route");
}
function index(Request $request, Response $response, array $args)
{
$this->view->render($response, 'index.phtml', $args);
return $response->withStatus(200);
}
}
What am I doing wrong?