<?php
return array(
'routes' => array(
'/' => 'Default:index',
'/php' => 'Default:info',
),
'route_404' => 'Default:notFound'
);
<?php
include ROOT . '/db/db.php';
$sql = 'SELECT * FROM routes';
$result = $pdo->query($sql);
while($r = $result->fetch())
{
$routes[]=array(
'id'=>$r['id'],
'uri'=>$r['uri'],
'controller'=>$r['controller'],
'action'=>$r['action']
);
}
return $routes;
?>
<?php
class Router {
public $routes;
public function __construct(){
$this->routes = include(ROOT.'/routing/routes.php');
}
private function getURI(){
if(!empty($_SERVER['REQUEST_URI'])){
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function Run(){
$uri = $this->getURI();
foreach($this->routes as $route){
if($route['uri'] === $uri){
//Узнаем имя контроллера и экшена:
$controllerName = $route['controller'];
$actionName = $route['action'];
//Назначаем имена файлу контроллера:
$controllerFileName = $controllerName . 'Controller.php';
//Подключаем файл контроллера:
include ROOT . '/controllers/'.$controllerFileName;
//Создаем класс контроллера:
$controllerObject = new $controllerName;
//Вызываем метод класса контроллера:
$result = $controllerObject->$actionName();
}
}
}
}
?>
А зачем дёргать базу данных на каждый запрос?
Попробуйте у себя сделать запрос на /book/1 или на /book?id=1
в вашем случае ядро прям слишком банальное и простое которое может написать любой студент на коленке
- по поводу request я решил не запариваться и работать с глобальными переменными. Если потребуется, я могу установить через компоузер request от symfony (или любой другой).
- обработчики ошибок мне не нужны, т.к. во время программирования я сразу буду видеть, где происходит ошибка и из-за чего. Пока что структура очень проста и не требует обработки. Если появятся узкие места, конечно я добавлю ексепшены
- шаблонизатор я принципиально не использую, php и так нормальный шаблонизатор.
- работа с консолью можно построить через GET. или таким же макаром создать контроллер который будет отвечать чисто на консольные команды. Это изи.
- для модульности стоит компоузер, можно поставить всё что угодно. Можно в проекте сделать папку со своими компонентами.
- минус о работе с правами доступа вообще не понял. один раз настроил сервер, и больше не паришься.
<?php
include ROOT . '/db/db.php';
$sql = 'SELECT * FROM routes WHERE uri = '.$uri;
$result = $pdo->query($sql);
while($r = $result->fetch())
{
$routes[]=array(
'id'=>$r['id'],
'uri'=>$r['uri'],
'controller'=>$r['controller'],
'action'=>$r['action']
);
}
return $routes;
?>