Как вариант:
use Silex\Application;
use App\Controller;
$app = new Application();
$app->get('/{controller}/{action}',
function($controller, $action) use ($app)
{
$controllerName = ucfirst($controller) . 'Controller';
if(class_exists($controllerName)) {
$controller = new $controllerName;
if ($controller instanceof Controller) {
if(is_callable(array($controller, $action))) {
return $controller->$action($app);
}
}
}
$app->abort(
404,
sprintf(
'No route found for: %s:%s',
$controller,
$action
)
);
})
->assert('controller', '[A-z]+')
->assert('action', '[A-z]+')
->value('controller', 'index')
->value('action', 'index');
$app->run();
Автозагрузку классов делаем через composer
...
"autoload": {
"psr-4": {"": ["model/", "controller/"] }
}
...
Контроллеры наследуем от супер-класса