1) Роутер написан не очень рационально, по идее неплохо бы сначала разобрать урл на составляющие (апп, язык, контроллер, экшн), а затем из этого проверять есть ли совпадения, и если нет - использовать дефолтный прописанный в урл путь как сайт/язык/апликэйшн/контроллер/экшн/парам1/валуе1/... , ну да не суть.
2) Дебаг - одна из ОЧЕНЬ важных составляющих в обучении и развитии программиста.
Важно понимать как и где что-то пошло не так, знать как проверить и быстро вникать в логику происходящего. Например:
public function run(){
if ($this->match()) {
$path = 'application\controllers\\'.ucfirst($this->params['controller']).'Controller';
if (class_exists($path)) {
$action = $this->params['action'].'Action';
if (method_exists($path, $action)) {
$controller = new $path($this->params);
$controller->$action();
} else {
var_dump(['no method',$this->params]);
exit();
View::errorCode(404);
}
} else {
var_dump(['no class',$this->params]);
exit();
View::errorCode(404);
}
} else {
var_dump(['no match',$this->params]);
exit();
View::errorCode(404);
}
}
И тупо смотрим что к чему...