gpt4 book ai didi

php - 在 PHP 中使用 DOM 以编程方式创建表单(或任何 HTML 片段)的最佳方法?

转载 作者:可可西里 更新时间:2023-11-01 00:16:07 25 4
gpt4 key购买 nike

我想创建一个表单生成器,它可以使用 PHP 以编程方式创建 HTML 表单,但我希望它是面向对象的。这让我开始关注 PHP 的 DOM 扩展,但它似乎适用于完整 HTML(和 XML)文档的概念,而不是 DOM 的一部分。

那么,在PHP中有没有可能以面向对象的方式创建HTML呢?例如,我的伪代码可能如下所示:

<?php

$form = new HTMLElement('form', array('method' => 'post', 'action' => 'contact.php'));

$fieldset = $form->addElement(new HTMLElement('fieldset'));
$fieldset->addElement(new HTMLElement('input', array(
'type' => 'text',
'name' => 'name'
)));
$fieldset->addElement(new HTMLElement('input', array(
'type' => 'email',
'name' => 'email'
)));
// and so on...

echo $form->asHTML();

最佳答案

您可以使用 DOMDocument (需要 PHP 5,顺便说一句):

<?php

$html = new DOMDocument('1.0','iso-8859-1');
$html->formatOutput = true;

$form = $html->createElement('form');

$fieldset = $html->createElement('fieldset');

$name = $html->createElement('input');
$name->setAttribute('type', 'text');
$name->setAttribute('name', 'name');

$email = $html->createElement('input');
$email->setAttribute('type', 'text');
$email->setAttribute('name', 'email');

$fieldset->appendChild($name);
$fieldset->appendChild($email);

$form->appendChild($fieldset);

$html->appendChild($form);

echo html_entity_decode($html->saveHTML());

http://codepad.org/sK0j6zD3

哪些输出:

<form><fieldset>
<input type="text" name="email"><input type="text">
</fieldset></form>

更完整的文档:

<?php

class br extends DOMElement {
function __construct() {
parent::__construct('br');
}
}

$page = new DOMDocument();
$page->normalizeDocument();
$page->formatOutput = true;

$html = $page->createElement('html');
$head = $page->createElement('head');
$title = $page->createElement('title');
$body = $page->createElement('body');
$form = $page->createElement('form');
$fieldset = $page->createElement('fieldset');
$name = $page->createElement('input');
$email = $page->createElement('input');
$submit = $page->createElement('input');

$title_text = $page->createTextNode('Page Title Here');
$title->appendChild($title_text);

$head->appendChild($title);

$html->appendChild($head);

$name->setAttribute('type', 'text');
$name->setAttribute('name', 'name');

$email->setAttribute('type', 'text');
$email->setAttribute('name', 'email');

$submit->setAttribute('type','submit');
$submit->setAttribute('value','Submit');

$fieldset->appendChild($page->createTextNode('Name: '));
$fieldset->appendChild($name);
$fieldset->appendChild(new br);
$fieldset->appendChild($page->createTextNode('Email: '));
$fieldset->appendChild($email);
$fieldset->appendChild(new br);
$fieldset->appendChild($submit);

$form->appendChild($fieldset);

$body->appendChild($form);

$html->appendChild($body);

$page->appendChild($html);

echo "<!DOCTYPE html>\n" . html_entity_decode($page->saveHTML());

http://codepad.org/uRNoW3nN

哪些输出:

<!DOCTYPE html>
<html>
<head><title>Page Title Here</title></head>
<body><form><fieldset>Name: <input type="text" name="name"><br>Email: <input type="text" name="email"><br><input type="submit" value="Submit">
</fieldset></form></body>
</html>

关于php - 在 PHP 中使用 DOM 以编程方式创建表单(或任何 HTML 片段)的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com