Non sono sicuro di essere intelligente o di rendere le cose più difficili. Sto lavorando all'interno di un framework MVC personalizzato e all'interno di alcune delle "viste" che contengono moduli sto conservando gli errori di input e di stile come segue:
<form action="submit" method="POST">
<label for="name" class="italic">Name:</label>
<input <?php if (in_array('name', $error)) { echo 'class="form-error"'; } ?> type="text" name="name" value="<?php if (isset($name)) { echo $name; } elseif (isset($valid_user)) { echo $valid_user['name']; } ?>" maxlength="20" required="required" />
<br /><input type="submit" class="submit" value="Update" />
In questo esempio, $valid_user['name']
sarebbe il valore predefinito per i dati esistenti (quando il modulo è stato caricato per la prima volta) e $name
sarebbe il valore postato che verrà visualizzato di nuovo qui nel caso in cui ci fosse un errore dell'utente che deve essere riparato.
L'incorporamento di tutti questi valori richiede molto tempo durante la creazione di nuovi moduli, quindi sto cercando di semplificare le cose da solo. Voglio rimanere con una soluzione lato server poiché ritengo che i siti web debbano essere completati da Javascript, non dipendenti da esso. Immagino che probabilmente potrei fare tutto questo dinamicamente usando il DOMDocument di PHP:
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTMLFile($view);
$forms = $dom->getElementsByTagName('form');
$total_forms = $forms->length;
for ($i = 0; $i < $total_forms; $i++) {
$inputs = $forms->item($i)->getElementsByTagName('input');
$total_inputs = $inputs->length;
if ($total_inputs > 0) {
foreach ($inputs as $input) {
$type = $input->getAttribute('type');
switch ($type) {
case 'text':
// check for errors
$attr_name = $input->getAttribute('name');
if (in_array($attr_name, $error)) {
$input->setAttribute('class', 'form-error');
}
// check for default / posted values
if (isset($$attr_name)) {
$input->setAttribute('value', $$attr_name);
} elseif (isset($_POST[$attr_name])) {
$input->setAttribute('value', $_POST[$attr_name]);
}
break;
}
}
}
}
echo $header;
// remove unwanted tags that are being automatically added
echo preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
echo $footer;
Seguire questo approccio richiederà ovviamente di scrivere un sacco di codice in più, quindi prima di andare avanti sono solo curioso di sapere quali sono le tue opinioni o se ci sono delle potenziali cadute che forse non sto pensando? Sarebbe meglio attenersi al mio approccio originale o ci sono altre soluzioni per renderlo meno noioso?