Страницы

Поиск по вопросам

вторник, 19 марта 2019 г.

Начинаю разбираться с MVC - какой подход будет правильным?

Начну с того, что я новичок, сделал всего один небольшой проектик на php "процедурным" способом и теперь ищу способ, чтобы перепрыгнуть огромную пропасть, отделяющую процедурное программирование от ООП. Большая часть инфы по MVC предусматривает, что я уже перебрался через эту пропасть, и оттого практически бесполезна. Нашёл пока единственную статью, которая максимально примитивно объясняет, начиная с основ, и пытаюсь по аналогии свой проектик переделать под MVC.
Возникла проблема - в моём проекте логика чуть посложнее, чем в "сайте-визитке", и статья не даёт ответа на вопрос, где и как это "посложнее" реализовать.
В упомянутой статье класс View крайне прост: метод View->Generate($view_content, $view_template) делает require $view_template.'.php', внутри шаблона в свою очередь в единственном месте стоит require $view_content.'.php'
У меня, в зависимости от контроллера/метода, необходимо делать вставки в шаблон в нескольких местах. Вопрос - как реализовать это правильно?
Предполагаемый мной вариант решения: в главный шаблон напихать конструкции вида include $block[0].'.php' (не require, чтобы не ругался при отсутствии файла), потом этот массив заполнять именами файлов в соотв. модели...
Сразу возникают вопросы:
если мне в данном view не нужно вставлять скажем $block[0] - как будет выполняться директива include? Будет ли она пытаться обращаться в файлу (в данном случае NULL)? Да и вообще, правильно ли так поступать? (upd: вариант конечно if (isset($block[0])) { include $block[0].'.php'; } - но это получается часть логики переносится в вид :/ ) как быть с блоками, которые хочется задействовать несколько раз? Например, у меня там простенькая формочка для фильтрации вывода с базы, но на одной странице она должна фильтровать поставщиков, а на другой - товар на складе? Реализовывать формочку через класс?


Ответ

Почитайте что такое виджеты и зачем они. Если вкратце то это независимое обращение к любому модулю вашего сайта, допустим модуль отзывов. Вы вызываете виджет данного модуля, и все инкампсулировано внутри него, он сам определяет на какой он странице (или в параметре передаете), знает к какой модели обратится, и как вывести данные в шаблон. Очень удобны и незаменимы.
Издалека ваш подход правильный, но я бы реализовывал массив по типу
$content = array( 'header' => 'Hellow world', 'short_description' => 'short description of page', 'footer_links' => array( 0 => array('name' => 'main page', 'link' => 'http://...'), .... ), );
и этот контент передаю непосредственно шаблону, темплейту. Где использую его так:

и так далее.

Комментариев нет:

Отправить комментарий