Предпочтительный способ объединения PHP и HTML?

Я изучил PHP, взломав phpBB2 и даже отправив несколько модов в их базу данных, которые другие скачали и использовали. (Я не верю, что phpBB2 больше не поддерживается с phpBB3 так долго, поэтому базы данных модов v2 больше нет.)

Одной из моих любимых вещей в phpBB была их система шаблонов, которая позволяла редактору полностью разделить HTML и PHP. Файлы PHP содержали PHP: логику, запросы к базе данных и активацию шаблонов. Файлы TPL содержали шаблоны: HTML, переменные шаблона и специальные комментарии HTML, позволяющие использовать условные или повторяющиеся блоки.

Однако каждый раз, когда я вижу чей-то PHP-код в Интернете, это либо небольшой фрагмент, работающий с одной функцией или чем-то подобным, либо PHP полон строк, содержащих HTML (или, что еще хуже, HTML с вкраплениями PHP). phpBB — единственный PHP, на который я смотрел, который фактически разделяет язык и язык разметки, предполагая, что немногие, если вообще есть, другие кодовые базы PHP делают такую ​​​​вещь.

Я хочу снова начать работать с PHP, но на этот раз это будет не форум phpBB, а команда. Исходя из моего опыта, разделение PHP и HTML встречается редко (пожалуйста, поправьте меня, если я ошибаюсь!). Однако я так привык к этой разделительной линии, что ненавижу читать смесь PHP и HTML.

В «реальном мире» PHP-программирования какой предпочтительный метод:

  • PHP-файлы со строками HTML
  • Файлы HTML, разбитые блоками PHP
  • PHP и HTML полностью разделены (хочу?)
  • Что-то другое?

person Brian S    schedule 10.07.2010    source источник


Ответы (9)



Лично я не вижу смысла добавлять в смесь систему шаблонов/язык, когда PHP уже является превосходным решением.

Мой предпочтительный подход — отделить отображение от логики приложения. Это может принять форму полноценной структуры MVC. Тем не менее, это также может быть просто вопрос того, как вы пишете свой код.

Расширение:

С тех пор, как я совершил ошибку, перемежая свой HTML большим количеством ASP-кода, я пытался отделить логику страницы от отображения. На одной странице это означает размещение всей логики страницы вверху, сохранение отображаемой информации в переменных и последующее их отображение в HTML внизу файла PHP. Единственная логика, которая появляется в части HTML, — это логика отображения. Другими словами, простая обработка ошибок, ifs, циклы и т. д. По сути, то же самое, что вы найдете в большинстве языков шаблонов.

Причина, по которой я избегаю языков шаблонов, заключается в том, что это еще одна форма синтаксиса, о которой мне нужно беспокоиться. В чем смысл? PHP предоставляет больше, чем мне нужно для этой цели.

Между тем, вы можете использовать простой подход MVC, разделив вещи:

контроллер.php

<?php
// some application logic
$data['message'] = 'Hello, World.';

include 'view.php';

exit;
?>

вид.php:

<html>
<head>
<title>
A simple 'MVC' view
</title>
</head>
<body>
<p>
<?php

echo $data['message'];

?>
</p>
</body>
</html>

Это не лишено недостатков и проблем. Однако, если вы думаете, что можете добиться полного и четкого разделения логики приложения и отображения, вы ошибаетесь.

person George Marian    schedule 10.07.2010
comment
Не могли бы вы расширить это? Как именно PHP является решением для разделения PHP и HTML? А как насчет примера вашего подхода MVC? Я понимаю концепцию MVC, но мой мозг выходного дня (включенный только наполовину!) не имеет концепции PHP MVC для разделения логики и представления. - person Brian S; 11.07.2010
comment
Спасибо за развернутый ответ. Похоже, ваша рекомендация аналогична рекомендации от bobince? - person Brian S; 11.07.2010
comment
@bobince Да, в значительной степени. Мотивация моего ответа заключалась в том, чтобы предостеречь от использования системы шаблонов. Есть ситуации, когда они могут быть полезны. Скажем, если у вас есть отдельная команда, посвященная интерфейсу. Однако, если вы знаете PHP и отвечаете за HTML (или бэкенд-разработчикам приходится много с ним работать), я думаю, что системы шаблонов, как правило, излишни. Хорошая практика кодирования может достичь того же результата без дополнительного уровня обработки. - person George Marian; 11.07.2010
comment
Хорошо я понял. Мотивация для моего вопроса была в основном потому, что я настолько привык к шаблонам phpBB, что мне просто не нравится читать файлы со смешанным PHP и HTML. Я думаю, что мог бы справиться с этим уровнем смеси; Я думаю, что единственное существенное различие между тем, к чему я привык, и вашим примером MVC будет заключаться в логике представления, и этот маршрут даже будет лучше (по крайней мере, по сравнению с phpBB2), если логика представления станет особенно сложной. - person Brian S; 11.07.2010
comment
@Brian S Обратите внимание: если вы удалите вызовы для включения и выхода, это можно сделать в одном файле. Такой подход я обычно использую для относительно простых страниц. - person George Marian; 11.07.2010

Мы используем настраиваемую базу воспламенителя кода для MVC и просто разделяем логику и макет. это не обязательно означает, что в нашем html нет php, просто он не используется для логики. Совершенно нормально перебирать набор записей с php-кодом в шаблоне imho, просто не пытайтесь разговаривать с бизнес-объектами и фактически делать что-то в шаблонах макета. Конечно, вы также можете найти что-то вроде tal или миллион других шаблонов, если вы действительно хотите избавиться от всех php-код там. Я как бы думаю, что это в основном излишество, если только «вставить здесь особое обстоятельство»

редактировать исправлена ​​опечатка

person Kris    schedule 10.07.2010

По моему опыту, многие PHP-разработки, к лучшему или к худшему, заканчиваются файлами php, связанными друг с другом через включения, которые распечатывают фрагменты HTML по мере необходимости.

Имейте в виду, что большая часть моего опыта работы с PHP связана скорее с решением «нам просто нужно что-то, что работает», чем с «нам нужно самое элегантное и эффективное решение».

person Sushisource    schedule 10.07.2010
comment
Это имеет большой смысл, и это объясняет весь код, который я вижу вокруг, и на который я ненавижу смотреть. - person Brian S; 11.07.2010

каждый раз, когда я вижу чей-то PHP-код в Интернете, это либо небольшой фрагмент, работающий с одной функцией или чем-то подобным, либо PHP полон строк, содержащих HTML (или, что еще хуже, HTML с вкраплениями PHP).

Да, общее качество кода смущает.

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

Если вы хотите по-прежнему писать обычный PHP, но без спагетти:

  1. Держите код действия в верхней части файла или в другом файле. Поместите сюда только логику приложения, а не HTML или шаблоны. Любая информация, сгенерированная на этом этапе, которая должна отображаться шаблоном, должна быть помещена в переменную для передачи в часть шаблона, а не print​выведена в середине загрузки бизнес-логики.

  2. Возьмите свои знания о шаблонах на основе тегов и примените их к PHP. Имейте единую иерархию кода с правильными отступами для логики представления как HTML, так и PHP, как если бы вы писали «правильно сформированный» XML (независимо от того, используете ли вы на самом деле XHTML или нет). Избегайте размещения HTML в строках любой ценой.

  3. Определите более простой способ вызова htmlspecialchars(), потому что в противном случае печатать это все время будет настоящей болью, и если вы не будете печатать это все время, у вас будут потенциально чувствительные к безопасности ошибки.

Подводя итог, например:

<?php
    // active code here
    // do things
    // put any errors in a $errors array

    // this trivial function would presumably be in an include
    //
    function h($s) {
        echo htmlspecialchars($s, ENT_QUOTES);
    }
?>

<body>
    <?php if (count($errors)!=0) { ?>
        <ul id="errors">
            <?php foreach ($errors as $error) { ?>
                <?php h($error); ?>
            <?php } ?>
        </ul>
    <?php } ?>
    ...
</body>

В «реальном мире» PHP-программирования какой предпочтительный метод:

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

person bobince    schedule 10.07.2010
comment
Можете ли вы указать мне исходный код для нетривиального проекта, отформатированного таким образом? Мне нравится эта концепция, но я хотел бы посмотреть, насколько она удобочитаема в более широком масштабе и как обрабатываются многие конкретные обстоятельства. - person Robert; 11.07.2010
comment
Нет, я не могу. Мне еще предстоит встретить общедоступный PHP-проект, шаблонизация которого не представляет собой лабиринт извилистых маленьких эхо-HTML, похожих друг на друга. - person bobince; 11.07.2010

Я предпочитаю использовать систему шаблонов, чтобы свести к минимуму количество кода PHP, содержащегося в файлах HTML. Я действительно не вижу никакого способа полностью отделить PHP от HTML, но я считаю, что достаточно отделить бизнес-логику (базу данных) от логики представления.

Моя система шаблонов самодельная, но я уверен, что вы можете найти разнообразие, которое будет работать, выполнив поиск в Google.

person Dan D.    schedule 10.07.2010

Исходя из моего опыта, разделение PHP и HTML встречается редко.

Истинный. Но большая часть PHP-кода написана неопытными разработчиками. Кроме того, PHP не поощряет, а скорее препятствует написанию хорошего кода, и возможность смешивать HTML с программным кодом — один из примеров этого.

Если вы хотите создавать высококачественный код, чтобы иметь возможность легко поддерживать и расширять его, я настоятельно рекомендую использовать механизм шаблонов или что-то подобное. Смешивание обоих оказывает огромное влияние на читабельность вашего кода и со временем приводит к тому, что что-то становится все хуже и хуже. Рефакторинг будет болезненным, если не невозможным.

Теперь у вас есть большой выбор способов отделить HTML от PHP.

  • Наиболее очевидным является использование существующего механизма компоновки. Их много, некоторые очень хорошо сделаны и с очень низким влиянием на производительность.

  • Вы также можете написать свой собственный движок. Это может быть не очень хорошей идеей для большого проекта (зачем изобретать велосипед?), но может быть решением либо для крошечного проекта, либо когда вам нужно что-то очень конкретное.

  • Последний способ, который я использую в большинстве проектов, — это создание XML из бизнес-уровня (сериализация XML довольно проста в PHP), а затем использование XSLT для преобразования этого в HTML-страницу. Это позволяет делать веб-сайты, которые намного легче поддерживать и легче понять, и, кстати, позволяет программно обращаться к данным веб-сайта (загружая XML вместо HTML-страницы), когда это необходимо. С другой стороны, это сильно снижает производительность, поэтому не предназначено для больших веб-сайтов с тысячами запросов в секунду.

person Arseni Mourzenko    schedule 10.07.2010

Большая часть кода начинается со строк PHP и HTML, а затем превращается в систему шаблонов во время большой переделки. Отделение контента от логики требует проектирования, планирования и взаимодействия между командой. Использование XML или JSON вместо массивов PHP в качестве формата данных упрощает эту задачу.

person Community    schedule 04.03.2013

вы можете смешивать PHP внутри HTML или наоборот, просто добавляя открывающий <?php и закрывающий ?> теги PHP между вашим HTML.

<!DOCTYPE html> 
  <head>         
<title>Hello world as text</title> 
  </head> 
    <body>                 
        <?php                 
            echo "<p>Hello world</p>";                 
        ?>         
    </body> 
</html> 

Для получения дополнительной информации: https://stackhowto.com/how-to-combine-html-and-php/

person thomas    schedule 04.12.2020