ubernoob
@ubernoob

Какие есть недостатки в этом php-роутере?

ООП не знаю, но роутинг нужен для удобства. Фреймворки смотрел как сделаны, но там совершенно другая архитектура, поэтому по возможности дать рекомендации, критику именно по этому коду.
### Если роутера нет - это главная страница
    if(!isset($_GET['route'])){
            include_once "main.php";
    }
    
### Если роутер есть - это не главная страница
    else{
        // Получаем URL
        $route = preg_replace('/\/$/ism', '', $_GET['route']);
        
        // Ищем по нему в базе
        $st = $pdo->prepare('SELECT `title`, `head`, `desc`, `keyw`, `text`  FROM `artm` WHERE url=:url');
        $st->bindParam(':url', $route, PDO::PARAM_STR);
        $st->execute();
        $res = $st->fetchAll();
        

### Если результат из БД НЕ пустой - это страница
        if(!empty($res)){
            // Подключаем шаблон и отдаём юзеру
            include_once $_SERVER['DOCUMENT_ROOT']."/template/header.php";
                echo $res[0]['text'];
            include_once $_SERVER['DOCUMENT_ROOT']."/template/footer.php";
        
        }

### Если результат из БД пустой - это лендинг в файле или 404
        elseif(empty($res)){
            
            // Ищем в массиве лендингов имя лендинга совпадающее с роутером
            $pageurl = false;
            $pageurl = array_search($route, $landing);

            // Если найдено - открываем лендинг
            if($pageurl != false){
                include_once $_SERVER['DOCUMENT_ROOT']."/$route";
            }
            
            // Восстановление забытого пароля
            elseif(preg_match('/password[a-z0-9]{32}/ism', $_GET['route'], $TokenPassword)){
                include_once 'php/fogetpass.php';
            }
            
            // Если ничего не найдено отдаём 404
            else{
                echo "Страница 404<br>";
            }
        }
    }


UP
Не особо понимаю в чём принципиальное достоинство кода:
$app->get('/hello/{name}', function (Request $request, Response $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

перед моим?
Вынести как можно больше из index-файла? Ну это и я могу логику просто ещё на один уровень вынести и там разобрать...
  • Вопрос задан
  • 490 просмотров
Решения вопроса 2
@topot
Это у Вас не роутер, а целый сайт/приложение. Монолитное. Единое целое.
Что "не так" с этим приложением?
Всё. Если говорить о правильности подходов.
Что так с этим приложением?
Оно работает. И оно является этапом Вашего роста.
Роутер не должен ничего инклудить и, тем более, знать о каких-то там темплейт-хедерах, да ещё и запросы в базу делать.
Он должен только обладать информацией - "с этим - туда, а с этим - сюда". А информацией этой может воспользоваться уже Диспетчер. Он у Вас тоже вмонтирован своего рода в монолит.
Вам правильные вещи тут говорят. Попробуйте услышать.
Ответ написан
Denormalization
@Denormalization
Не особо понимаю в чём принципиальное достоинство кода

Во всем.

Ваш роутер (это даже не роутер):
- Не гибкий.
- Нет возможности делать маску.
- Нет возможности назначения middleware.
- Нет возможности делать отдельные группы роутов со своими правилами.
- Как работать с параметрами запроса?

Это НЕ роутер. Это просто switch/case поделка, которую нужно выкинуть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
streetflush
@streetflush
Не буду ничего говорить по этому коду. Просто оставлю это тут :
www.slimframework.com
Очень просто и удобно.
Ответ написан
Комментировать
trevoga_su
@trevoga_su
www.phpinfo.su/articles/practice/chpu_na_php.html - 40 строк кода, что бы "с этим - туда, а с этим - сюда".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы