Код соответствующий модели MVC

  • Автор темы Автор темы ivan453
  • Дата начала Дата начала

ivan453

Новичок
Вопрос в следующем как разделить код для модели (то что для БД) и код для контроллера(обрабатывает то что получает от пользователя)?
В коде который ниже все в вперемешку, наверно так не правильно.(это файл fullnews учебной ленты новостей - выводиться полная новость и можно оставить комментарий)
PHP:
<?php
session_start();

require_once './modules/function/function.php';

$id_ = intval($_GET['id']);

$query = "select * from news where id=$id_";

$ln_db->get_query($query);

$row = $ln_db->get_from_db();


//name string comments
$name_news = $row[0]['name'];


//комментарий
$query = "select name,date,comment,email from comments_user where news_name ='$name_news'";

$ln_db->get_query($query);

$row_comm = $ln_db->get_from_db();


if(@$_POST['add_comm']){

   
  $res_form = intval($_POST['number']);
    
  $warnig = check_fields($_POST['_name'], $_POST['email'], $_POST['comment'],@$_SESSION['res'],$res_form);
  
    if(empty($warnig)){
        
        $str = htmlspecialchars($_POST['comment']);
        
        $str = check_input($_POST['comment']);
        
        $name = check_input($_POST['_name']);
        
        $email = check_input($_POST['email']);
                        
        
        $query = "insert into  comments_user values (NULL,'$name',Now(),'$str','$email','$name_news')";

        $ln_db->get_query($query);
 
        $ln_db->get_from_db();

        header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
        exit;
    }


}

$rand_mass = random_number();

$rand_numbr1 = $rand_mass[0];

$rand_numbr2 = $rand_mass[1];

$token = $rand_mass[3];

$_SESSION['res']= $rand_mass[4];
Несколько раз идет примерно такой код
PHP:
$query = "select * from news where id=$id_";

$ln_db->get_query($query);

$row = $ln_db->get_from_db();
И этот код вперемешкус кодом для контролера.
Наверно нужно вместо этого какая функция(что бы это было в одном месте), но тогда же будет же модельный код и контроллерный мешаться между собой?!
Понимаю что МVC это разделение логики приложения, но сам код не разделяется?
 
Ой что сейчас будет... хм...
cats_01.gif
 
ivan453
забей, тебе еще рано думать про mvc. Как дорастешь - возьми какой-нибудь фреймворк и сделай на нем. Пока просто подумай как часто используемый код вынести в функции.
 
Прочитай эту тему:
http://phpclub.ru/talk/threads/Класс-вызывается-2-раза.73406/
Фигурирущий в ней болван оказался не в состоянии ничего понять. Если у тебя мелькнут просветы, задавай более конкретные вопросы. Иначе никто расстилаться здесь по этой теме не будет.
 
Ваше мнение очень важно для нас, оставайтесь на линии.
 
Ragazzo
вы уверены ? интересно по теме кто-нибудь выскажется :)
 
ivan453
(после прочтения кода) гм , превосходно а за это деньги платят ?
по теме: подсказка ; отделите запросы, дайте осмысленные названия функциям, покажите че получилось.
 
ну так на скидку

модель
PHP:
class CommentsUser{

// другие методы

public function getCommentRowByNewsName($name_news){
//комментарий
  $query = "select name,date,comment,email from comments_user where news_name ='$name_news'";
  $this->ln_db->get_query($query);
  return $this->ln_db->get_from_db();
}}
контроллер
PHP:
$name_news = $model->getCommentRowByNewsName($name_news);

в контроллере я знать не хочу откуда беруться данные, за это отвечает модель, хорошо если ответ модели не просто аrray а всеже некий RowObject типа Bean который не только содержит данные но и методы по выводу этих данных,.. но это уже больше Java чем PHP
 
Для начала надо бы задуматься, а зачем вообще этот MVC Вам нужен. Не для записи в резюме ведь :) Посмотреть на код, и подумать, какие минусы в нем есть, насколько сложно будет потом что-то в нем поменять (например, настройки БД, имена полей/таблиц), добавить функционал или передать кому-то на сопровождение.
 
WMix
Надеюсь, что в запросе $name_news не просто так туда попадает, а то как-то неправильно дырки делать.
 
c0dex
я просто обернул то что он написал, вопрос стоял какая часть модель а какая контроллер...
 
Прочитай эту тему:
http://phpclub.ru/talk/threads/Класс-вызывается-2-раза.73406/
...задавай более конкретные вопросы. Иначе никто расстилаться здесь по этой теме не будет.

Если есть несколько селектов
PHP:
 $query = "select * from news where id=$id_";

$ln_db->get_query($query);

$row = $ln_db->get_from_db();
что то такое, 2-3 раза в одном пхп файле.
Ведь это не есть хорошо, само по себе??
Все это нужно как-то собрать в одном файле(сами запросы) или даже для каждого запроса один файл по названию таблицы-читал это на форуме этом же, который подключать нужно в необходимых местах?
 
С точки зрения канона MVC это не преступление. Но если пойти дальше и выделять внутри модели отдельный слой хранилища, рабoтающий на тех же принципах заменяемости, то да, действительно запросы к хранилищу лучше оформлять отдельно.

Таким образом в "чистой" модели уже не будет вызовов типа
PHP:
$ln_db->get_query($query);
Обращение будет происходить к абстрактному хранилищу и не в общих терминах БД, а в соданных специально для данного приложения:
PHP:
$storage->getNews($id_)
 
Логично :
1. не писать полный запрос : select * from news where id=$id_, а сделать драйвер всех запросов к БД.
2. использовать ООП на полную, т.е работать с сущностями. Users и тд, в которых и определять все взаимодействие.
 
Сверху