Ответы пользователя по тегу ООП
  • Рефакторинг кода контроллера MVC модели?

    blo
    @blo
    инженер-программист
    Как один из вариантов
    <?php
    function getAction()
    {
        $fc   = FrontController::get();
        $url  = $fc->getParams();
        $view = new View();
        //возваращаем запрашиваемую статью из базы в виде ассоциативного массива
        $view->content = Articles::get()->getArticle((int)$url['id']);
        //выборка комментариев к статье
        $view->comments = Articles::get()->getComments((int)$url['id']);
    
        if ($_SERVER['REQUEST_METHOD'] != 'POST' || !isset($_POST['addcomment'])) {
            $view->comments == false ? $view->comments = 'Комментариев к статье еще нет!' : $view->comments;
    
            return _renderView($view);
        }
    
        if ($_SESSION['captcha'] != crypt($_POST['captcha'], 'x)p_q1')) {
            $view->comments = 'Вы ввели символы с картинки некорректно!';
    
            return _renderView($view);
        }
    
        if (empty($_POST['comment_txt']) || empty($_POST['name'])) {
            $view->comments = 'Поля не должны содержать пустых значений!';
    
            return _renderView($view);
        }
    
        if ($_POST['article_id'] != (int)$url['id']) {
            $view->comments = 'Вы пытаетесь вставить комментарий не в ту статью!';
    
            return _renderView($view);
        }
    
        $check = Articles::get()->checkComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
    
        if ($check != '0') {
            $view->comments = 'Данный комментарий уже добавлен!';
    
            return _renderView($view);
        }
    
        $view->comments = Articles::get()->addComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
        $view->comments ? $view->comments = 'Ваш комментарий успешно добавлен!' : $view->comments = 'Ошибка при вставке комментария!';
    
        return _renderView($view);
    }
    
    function _renderView($view)
    {
        $fc = FrontController::get();
    
        (empty($view->content['title'])) ? $view->title = 'Такой статьи нет' : $view->title = $view->content['title'];
        (empty($view->content['meta_key'])) ? $view->keywords = '' : $view->keywords = $view->content['meta_key'];
        (empty($view->content['meta_description'])) ? $view->description = '' : $view->description = $view->content['meta_description'];
    
        $result = $view->render('../views/article.php');
        $fc->setBody($result);
    }
    

    правда с дополнительным методом для удобства.
    Ответ написан
    1 комментарий