Добрый день. При разработке сайта для лабораторной по веб программированию столкнулся с некоторой проблемой. Скажу сразу, что мои знания пока ограничены начальной базой HTML+CSS, плюс несколько начальных глав из книги по php, в которой описываются особенности языка и простейший синтаксис. В работе с логикой сайта закончил лишь простую регистрацию/авторизацию, код для которых валяется в отдельных файлах php. На занятии дали ясно понять, что необходимо все подогнать под структуру сайта, которая выглядит таким образом: имеется роутер, модель и фронтенд. Названия этой структуры я не знаю и все мои попытки поискать закончились лишь горой пока непонятного кода. Отсюда вопрос - MVC ли это cхема или какая-то из ее разновидностей и где о ней можно почитать на более простом языке? На данный момент меня интересует простой и конкретный пример, в случае с MVC и моей регистрацией на сайте, если форма для ввода лежит во фронтенде, то где должен лежать код проверки регистрации, связь с базой и т.д и как это все затем соединить. Тема на самостоятельное изучение и вопрошать больше негде. Если вопросы слишком глупые, то черканите хотя-бы что-то в ЛС по поводу "почитать". Заранее спасибо.
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): <?php function model() { return array('one', 'two', 'three'); } function view($model) { echo "<ul>"; foreach ($model as $key => $value) { echo "<li>$value</li>"; } echo "</ul>"; } function controller() { $model = model(); view($model); } function router() { controller(); } router();
MVC - модель / схема / шаблон /паттерн / парадигма и еще кучу красивых слов, создания сайта, на ней делаются почти все сайты, какой то другой схемы нет (есть, но они происходят от MVC). смысл MVC это то, что ты свой код логически делишь на части, где каждая часть отвечает за что то конкретно, контроллер за вызов определенной модели и вида, модель за обработку данных, вид за предоставление данных в виде html кода. почитать как это реализовано можно тут - http://habrahabr.ru/post/150267/
Эх, все ссылки что вы дали я уже смотрел (кроме английской), на абстрактном уровне смысл я понял, как разделить свой проект под этот шаблон - нет. Читаю про роутер на хабре, открываю то что мы там наваяли в своем роутере - у нас написана какая-то чушь. В model.php вообще пусто, какую логику туда пихать тоже непонятно, у меня только обработка форм регистрации/авторизации пока что.
Начните с базовых моментов: роутер - это то что принимает запрос от пользователя и передает его в нужный контроллер. контроллер - это то что "командует" остальными частями, берет запрос, смотрит что нужно сделать, меняет модель если необходимо, выводит шаблон. модель - это то что работает с данными, она содержит набор методов для выборки, изменения, добавления и удаления. шаблон - это то что отдается пользователю: страницы, таблицы, формы и т.д. Реализация может быть разная, главное что бы каждая часть выполняла свою функцию и не лезла к остальным. К примеру если вы в шаблоне напрямую работаете с моделью - это проблема, шаблон должен оперировать только тем что ему отдал контроллер. Возможно вам стоит поинтересоваться на предмет возможности использования сторонних компонентов. Заодно и опыта наберетесь.
Web Style ага, ещё на википедии всё хорошо описано, ну и в документации к Yii2 Best Practices http://www.yiiframework.com/doc-2.0/guide-structure-control ... -practices http://www.yiiframework.com/doc-2.0/guide-structure-models. ... -practices http://www.yiiframework.com/doc-2.0/guide-structure-views.h ... -practices
Фреймворки это конечно хорошо, наверное, но проект с их использованием у меня никто не примет, подразумевается что все должно быть написано руками и с нуля. За ссылки спс, буду думать.
Не нужно смотреть фреймворки, т.к. фреймворки сделаны не для такого что бы по ним изучали MVC и если смотреть фреймворки то это только усугубит дело. Я вот MVC знаю, понимаю, но смотрел Laravel и ни чего не понял, пока не посмотрел уроки. Что бы было понятно MVC тебе надо проследить цикл жизни от получения запроса до предоставления данных: 1. в файл index.php заходит пользователь, все что делает этот файл, это подключает файлы с настройками (конфигурацию) сайта, после этого подключает класс route (сделанный пользователем), создает объект этого класса и вызывает единственны, ну или главный его метод 2. класс route, его задача исходя из url по которому перешел пользователь определить, а что же хочет этот отрок от этого сайта, допустим он перешел по адресу /user/registration метод вытаскивает из url user и registration, проверяет существуют ли такие страницы, допустим существуют (если не существует выдает ошибку 404), после чего вызывает контроллер 3. Контроллеры это всего лишь классы выполняющие определенный тип действий, в данном случае класс будет называться user, а метод который будет вызываться registration, т.е. данные из url, у методов в контроллере всего 2 задача, первая вызвать нужную модель, получить от нее данные и вызвать нужный вид, примерно как то так: Код (PHP): class UserController extends BaseController { function registration() { $registration = new RegistrationModel(); $data = $registration->run(); View::load('registration_form', $data); } } 4. Модель это всего лишь классы выполняющие определенный тип действий, тут уже происходят все действия связанные с регистрацией, проверить авторизован пользователь или нет (ну если он авторизован о какой регистрации может идти речь), проверить данные, все ли он заполнил и все ли верно он заполнил, проверить допустим логин БД, может он уже занят, если не занят добавить его в БД, сформировать массив данных на основании которых будет сформирована HTML страница и вернуть его в контроллер 5. Снова в контроллере, тут мы вызывает соответствующий вид и передаем ему соответствующий массив данных, на основании которых будет сформированная страница 6. Вид, ну а тут мы формирует HTML на основе полученных данных разметку и отдаем ее пользователю. Если тебе вдруг нужно будет поменять вызываемый вид, ты всегда будешь знать где он - в контроллере, если тебе надо будет дописать еще какую-нибудь проверку ты всегда будешь знать что это в модели. И не только ты, а любой другой программист который будет работать с твоим кодом.