Разделение презентации и бизнес-логики в PHP - PullRequest
6 голосов
/ 15 июня 2010

Я программирую свой первый настоящий PHP-сайт и задаюсь вопросом, как сделать свой код более читабельным для себя. Справочник, который я использую, - PHP и MySQL Web Development, 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-программирования здесь, но я просто еще не знаю термины для них.

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

Ответы [ 3 ]

4 голосов
/ 15 июня 2010

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

<tr class="<?php echo $myclass; ?>">

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

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

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

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

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

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

1 голос
/ 15 июня 2010

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

1 голос
/ 15 июня 2010

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

(и выбрось эту книгу, похоже, она ... старая)

...