За последние 24 часа нас посетили 42456 программистов и 1816 роботов. Сейчас ищут 845 программистов ...

Вопросы по MVC и кое что еще

Тема в разделе "Прочие вопросы по PHP", создана пользователем q1_q2, 10 май 2015.

  1. q1_q2

    q1_q2 Новичок

    С нами с:
    10 май 2015
    Сообщения:
    3
    Симпатии:
    0
    Добрый день.

    При разработке сайта для лабораторной по веб программированию столкнулся с некоторой проблемой. Скажу сразу, что мои знания пока ограничены начальной базой HTML+CSS, плюс несколько начальных глав из книги по php, в которой описываются особенности языка и простейший синтаксис.

    В работе с логикой сайта закончил лишь простую регистрацию/авторизацию, код для которых валяется в отдельных файлах php. На занятии дали ясно понять, что необходимо все подогнать под структуру сайта, которая выглядит таким образом: имеется роутер, модель и фронтенд. Названия этой структуры я не знаю и все мои попытки поискать закончились лишь горой пока непонятного кода. Отсюда вопрос - MVC ли это cхема или какая-то из ее разновидностей и где о ней можно почитать на более простом языке?

    На данный момент меня интересует простой и конкретный пример, в случае с MVC и моей регистрацией на сайте, если форма для ввода лежит во фронтенде, то где должен лежать код проверки регистрации, связь с базой и т.д и как это все затем соединить. Тема на самостоятельное изучение и вопрошать больше негде. Если вопросы слишком глупые, то черканите хотя-бы что-то в ЛС по поводу "почитать".

    Заранее спасибо.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    https://ru.wikipedia.org/wiki/Model-View-Controller
    http://www.yiiframework.com/doc/guide/1.1/ru/index
    или
    http://symfony.com/doc/current/book/http_fundamentals.html - тут хоть и на английском но там описывают преимущество MVC и framework

    Код (PHP):
    1. <?php
    2.  
    3. function model()
    4. {
    5.     return array('one', 'two', 'three');
    6. }
    7.  
    8. function view($model)
    9. {
    10.     echo "<ul>";
    11.     foreach ($model as $key => $value) {
    12.         echo "<li>$value</li>";
    13.     }
    14.     echo "</ul>";
    15. }
    16.  
    17. function controller()
    18. {
    19.     $model = model();
    20.     view($model);
    21. }
    22.  
    23. function router()
    24. {
    25.     controller();
    26. }
    27.  
    28. router();
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    MVC - модель / схема / шаблон /паттерн / парадигма и еще кучу красивых слов, создания сайта, на ней делаются почти все сайты, какой то другой схемы нет (есть, но они происходят от MVC).

    смысл MVC это то, что ты свой код логически делишь на части, где каждая часть отвечает за что то конкретно, контроллер за вызов определенной модели и вида, модель за обработку данных, вид за предоставление данных в виде html кода.

    почитать как это реализовано можно тут - http://habrahabr.ru/post/150267/
     
  4. q1_q2

    q1_q2 Новичок

    С нами с:
    10 май 2015
    Сообщения:
    3
    Симпатии:
    0
    Эх, все ссылки что вы дали я уже смотрел (кроме английской), на абстрактном уровне смысл я понял, как разделить свой проект под этот шаблон - нет. Читаю про роутер на хабре, открываю то что мы там наваяли в своем роутере - у нас написана какая-то чушь. В model.php вообще пусто, какую логику туда пихать тоже непонятно, у меня только обработка форм регистрации/авторизации пока что.
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Начните с базовых моментов:
    роутер - это то что принимает запрос от пользователя и передает его в нужный контроллер.
    контроллер - это то что "командует" остальными частями, берет запрос, смотрит что нужно сделать, меняет модель если необходимо, выводит шаблон.
    модель - это то что работает с данными, она содержит набор методов для выборки, изменения, добавления и удаления.
    шаблон - это то что отдается пользователю: страницы, таблицы, формы и т.д.

    Реализация может быть разная, главное что бы каждая часть выполняла свою функцию и не лезла к остальным. К примеру если вы в шаблоне напрямую работаете с моделью - это проблема, шаблон должен оперировать только тем что ему отдал контроллер.

    Возможно вам стоит поинтересоваться на предмет возможности использования сторонних компонентов. Заодно и опыта наберетесь.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    q1_q2 выложи свой код на github например, посмотрим, посоветуем, что куда и почему
     
  7. Web Style

    Web Style Новичок

    С нами с:
    7 май 2015
    Сообщения:
    8
    Симпатии:
    0
    Чтобы понять MVC, нужно поработать на фреймворках например на Yii
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  9. Web Style

    Web Style Новичок

    С нами с:
    7 май 2015
    Сообщения:
    8
    Симпатии:
    0
  10. q1_q2

    q1_q2 Новичок

    С нами с:
    10 май 2015
    Сообщения:
    3
    Симпатии:
    0
    Фреймворки это конечно хорошо, наверное, но проект с их использованием у меня никто не примет, подразумевается что все должно быть написано руками и с нуля.

    За ссылки спс, буду думать.
     
  11. Web Style

    Web Style Новичок

    С нами с:
    7 май 2015
    Сообщения:
    8
    Симпатии:
    0
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    q1_q2 по фреймворкам можно понять как свой сделать
     
  13. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Не нужно смотреть фреймворки, т.к. фреймворки сделаны не для такого что бы по ним изучали MVC и если смотреть фреймворки то это только усугубит дело. Я вот MVC знаю, понимаю, но смотрел Laravel и ни чего не понял, пока не посмотрел уроки.

    Что бы было понятно MVC тебе надо проследить цикл жизни от получения запроса до предоставления данных:

    1. в файл index.php заходит пользователь, все что делает этот файл, это подключает файлы с настройками (конфигурацию) сайта, после этого подключает класс route (сделанный пользователем), создает объект этого класса и вызывает единственны, ну или главный его метод

    2. класс route, его задача исходя из url по которому перешел пользователь определить, а что же хочет этот отрок от этого сайта, допустим он перешел по адресу /user/registration метод вытаскивает из url user и registration, проверяет существуют ли такие страницы, допустим существуют (если не существует выдает ошибку 404), после чего вызывает контроллер

    3. Контроллеры это всего лишь классы выполняющие определенный тип действий, в данном случае класс будет называться user, а метод который будет вызываться registration, т.е. данные из url, у методов в контроллере всего 2 задача, первая вызвать нужную модель, получить от нее данные и вызвать нужный вид, примерно как то так:
    Код (PHP):
    1. class UserController extends BaseController
    2. {
    3.     function registration()
    4.     {
    5.         $registration = new RegistrationModel();
    6.         $data = $registration->run();
    7.         
    8.         View::load('registration_form', $data);
    9.     }
    10. }
    4. Модель это всего лишь классы выполняющие определенный тип действий, тут уже происходят все действия связанные с регистрацией, проверить авторизован пользователь или нет (ну если он авторизован о какой регистрации может идти речь), проверить данные, все ли он заполнил и все ли верно он заполнил, проверить допустим логин БД, может он уже занят, если не занят добавить его в БД, сформировать массив данных на основании которых будет сформирована HTML страница и вернуть его в контроллер

    5. Снова в контроллере, тут мы вызывает соответствующий вид и передаем ему соответствующий массив данных, на основании которых будет сформированная страница

    6. Вид, ну а тут мы формирует HTML на основе полученных данных разметку и отдаем ее пользователю.


    Если тебе вдруг нужно будет поменять вызываемый вид, ты всегда будешь знать где он - в контроллере, если тебе надо будет дописать еще какую-нибудь проверку ты всегда будешь знать что это в модели.
    И не только ты, а любой другой программист который будет работать с твоим кодом.