Answer the question
In order to leave comments, you need to log in
Refactoring MVC model controller code?
Hello comrades! For a long time I tried to figure out how to get rid of the abundance of conditional operators in the code, they pretty much make my eyes run and reduce the readability of the code. Please tell me how to get rid of the abundance of conditional statements without creating new class methods, below is an example of the controller class method code:
//вывод запрашиваемой статьи из базы
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' and isset($_POST['addcomment']))
{
if($_SESSION['captcha']==crypt($_POST['captcha'],'x)p_q1'))
{
if(!empty($_POST['comment_txt']) and !empty($_POST['name']))
{
if($_POST['article_id']==(int)$url['id'])
{
$check=Articles::get()->checkComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
if($check=='0')
{
$view->comments=Articles::get()->addComment($_POST['article_id'], $_POST['comment_txt'], $_POST['name']);
($view->comments) ? $view->comments='Ваш комментарий успешно добавлен!' : $view->comments='Ошибка при вставке комментария!';
}
else
$view->comments='Данный комментарий уже добавлен!';
}
else
$view->comments='Вы пытаетесь вставить комментарий не в ту статью!';
}
else
$view->comments='Поля не должны содержать пустых значений!';
}
else
{
$view->comments='Вы ввели символы с картинки некорректно!';
}
}
else
{
//проверка на наличие пришедших данных
($view->comments==false) ? $view->comments='Комментариев к статье еще нет!': $view->comments;
}
(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);
}
Answer the question
In order to leave comments, you need to log in
Use model?
<?php
//вывод запрашиваемой статьи из базы
function getAction()
{
$fc=FrontController::get();
$url=$fc->getParams();
$model = new ArticleModel();
$model->setParams($fc->getParams());
$model->validate();
$view=new View();
//возваращаем запрашиваемую статью из базы в виде ассоциативного массива
$view->content=$model->getContent();
//выборка комментариев к статье
$view->comments=$model->getComments();
$view->title=$model->getTitle();
...
$result=$view->render('../views/article.php');
$fc->setBody($result);
}
<?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);
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question