Страницы

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

воскресенье, 26 января 2020 г.

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

#php #ооп #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'; } - но это получается часть логики переносится в вид :/ )
как быть с блоками, которые хочется задействовать несколько раз? Например, у меня
там простенькая формочка для фильтрации вывода с базы, но на одной странице она должна
фильтровать поставщиков, а на другой - товар на складе?
Реализовывать формочку через класс?

    


Ответы

Ответ 1



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


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

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