Разделение презентации и бизнес-логики в PHP

Я программирую свой первый реальный веб-сайт PHP и задаюсь вопросом, как сделать мой код более читаемым мне. Справочник, который я использую, является PHP и веб-разработкой MySQL 4-й редактор.

Вышеупомянутая книга дает три подхода к разделению логики и содержания:

  • включайте файлы
  • функционируйте или класс API
  • шаблонная система

Я еще не выбрал ни одного из них, поскольку обертывание моих мозгов вокруг этих понятий занимает время. Однако мой код стал некоторым гибридом первых двух, поскольку я - просто вставка копии далеко здесь и изменяющий, когда я иду.

На стороне презентации все мои страницы имеют эти общие элементы: заголовок, главная навигация, навигация боковой панели, содержание, правильная боковая панель и нижний колонтитул.

Функциональные примеры в книге предполагают, что у меня могли быть эти функции дисплея, которые обрабатывают весь пример презентации. Так, мой код страницы будет похож на это:

display_header();
display_navigation();
display_content();
display_footer();

Однако мне не нравится это, потому что примеры в книге имеют эти операторы печати с HTML и PHP, перепутанным как это:

echo "<tr bgcolor=\"".$color."\"><td><a href=\"".$url."\">" ...

Я хотел бы иметь HTML с некоторым PHP в середине, не наоборот.

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

Затем в HTML-коде я циклично выполнюсь через эти массивы с помощью foreach и отображу содержание. В некоторых случаях будут некоторые переменные, которые покажут. Если будет ошибочная переменная, которая установлена, то я отображу это в надлежащем положении.

(Как примечание стороны: вещь, которую я не понимаю, состоит в том, что в большей части примера кода, если некоторый запрос базы данных или этажерка дают ошибку, всегда существует:

else echo 'Error';

Это экранирует меня, потому что, когда пример кода дает ошибку, он иногда отражается даже, прежде чем HTML запустился...),

Для людей, которые использовали ASP.NET, я стал несколько привыкшим к коду - позади файлов и lblError, и я пытаюсь сделать что-то подобное здесь.

Вещь, которую я не выяснил, состоит в том, как я мог сделать, это "делает логику сначала, затем презентация" вещь так, чтобы я не должен был бы копировать, например, логику навигации и презентацию навигации на всех страницах.

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

То, что я думаю, - то, что я говорю о некоторых понятиях или способах сделать PHP, программирующий здесь, но я просто еще не знаю условия для них.

Я знаю, что это не прямой вопрос, я просто нуждаюсь в некоторой помощи в организации моих мыслей.

6
задан Markus Ossi 15 June 2010 в 14:21
поделиться

3 ответа

Никогда не выводить HTML с помощью PHP. Вместо этого напишите его встроенным ( без злых коротких тегов ) как

Другие варианты, помогающие отделить логику / представление было бы использовать PHP Framework, например CodeIgniter .

Я бы отказался от книги и вместо этого сосредоточился на изучении основных навыков PHP, таких как функции, классы и т. Д. Затем начните играть с несколькими популярными фреймворками .

В качестве примечания: то, что я не делаю Поймите, что в большинстве примеров код, если какой-то запрос к базе данных или еще много чего выдает ошибку, есть всегда:

Это потому, что они неправильно отображают ошибки. Вы должны либо сохранить ошибки в сеансе, а затем отобразить их на странице (также очистив их), либо записать их в журнал ошибок с помощью функции error_log . error_log («Что-то случилось в MyClass»);

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

Подумайте о вещах в рамках подхода MVC . Сначала вы вызываете контроллер (логику). Он выясняет, что нужно. Если ему нужны данные из базы данных, он вызывает модель и запрашивает ее. Затем он форматирует его, добавляет другие данные, выполняет дополнительные запросы и затем передает их представлению.

4
ответ дан 17 December 2019 в 02:24
поделиться

похоже, что шаблонизатор - это то, что вы ищете - спросите у Google много результатов. лично мне очень нравится smarty .

(и выбросьте эту книгу, звучит так, будто она ... старая)

1
ответ дан 17 December 2019 в 02:24
поделиться

Похоже, что MVC (Model View Controller) может подойти для ваших нужд. Вы можете прочитать об этом здесь

1
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: