14-12-2009, 03:13 PM
Voila j'ai crée ma propre classe de formulaire, elle n'est pas tout a fait fini mais l'essentiel est déjà présent, et j'aurais besoin d'un avis pour savoir ce qui ne va pas dedans :]
Code PHP :
<?php
/**
* Description of form
*
* @author Siko
*/
class fcl_form {
/**
*
* Liste les élements autoriser
*/
private $allowElementsList = array(
'hidden' => '',
'reset' => '',
'checkbox' => '',
'file' => '',
'password' => '',
'radio' => '',
'button' => '',
'submit' => '',
'select' => '',
'text' => '',
'textarea' => '',
'advcheckbox' => '',
'date' => ''
);
/**
*
* Liste des elements appartenant au formulaire
*/
public $elementsList = array();
/**
*
* Liste des parametres autoriser pour un element de formulaire
*/
private $allowElementParams = array (
'text' => array ('value' => '',
'name' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'readonly' => '',
'disabled' => '',
'width' => '',
'maxlength' => '',
'id' => ''),
'button' => array ('name' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'disabled' => ''),
'hidden' => array ('name' => '',
'value' => '',
'alt' => '',
'disabled' => ''),
'password' => array ('name' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'readonly' => '',
'disabled' => '',
'width' => '',
'maxlength' => ''),
'submit' => array ('name' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'disabled' => ''),
'checkbox' => array ('checked' => '',
'option' => '',
'disabled' => ''),
'radio' => array ('name' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'disabled' => '',
'checked' => '',
'title' => ''),
'reset' => array ('name' => '',
'class' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'disabled' => '',
'title' => ''),
'file' => array ('name' => '',
'value' => '',
'alt' => '',
'tabindex' => '',
'accesskey' => '',
'disabled' => '',
'accept' => ''),
);
/**
*
* Liste des validator autoriser pour un element de formulaire
*/
private $allowValidatorList = array (
'lenght' => array(),
'email' => null,
'required' => null
);
/**
*
* Parametre accepter et valeur par default
* pour un formulaire.
*/
private $formParams = array (
'name' => '',
'method' => 'post',
'action' => '',
'id' => 'mainForm',
'enctype' => 'application/x-www-form-urlencoded',
'accept' => '',
'onsubmit' => '',
'onreset' => '',
'accept-charset' => 'utf-8',
'style' => ''
);
/**
*
* Attribut du formulaire
*/
private $formAttributes = array();
/*
*
* Erreur rencontrer lors de la validation
*/
private $validationError = null;
/**
*
* Constructeur, définit un nouveau formulaire
*
* @param array $params [name,method,action,id',enctype,accept,onsubmit,onreset,accept-charset,style]
*
*/
public function __construct ($params)
{
foreach ($this->formParams as $key => $value)
{
if (array_key_exists ($key, $params))
$this->formAttributes[$key] = $params[$key];
else if (!empty ($value))
$this -> formAttributes[$key] = $value;
}
}
/**
* Ajoute un element au formulaire
*
* @param string $type Type de l'element
* @param string $name Nom de l'element
* @param string $label Label de l'element
* @param array $params Voir $allowElementParams pour les paramètres autoriser selon le type
*/
public function addElement($type,$name,$label,$params = array())
{
// Si le type est autoriser on crée l'element
if(!array_key_exists($type,$this->allowElementsList))
die('Le type choisi n\'est pas valable pour l\'element '.$name);
$this->elementsList[$name] = array(
'type' => $type,
'name' => $name,
'label' => $label,
);
foreach($params as $key => $value)
{
if(array_key_exists($key,$this->allowElementParams[$type]))
$this->elementsList[$name]['params'][$key] = $value;
else
die('Le parametre '.$key.' n\'est pas valable pour l\'element '.$name);
}
}
/**
* Ajoute un validateur a un element formulaire
*
* @param string $type Type du validateur
* @param string $element Nom de l'element qui sera validé
* @param string $message Message afficher si la condition de validation n'est pas remplis
* @param array $params Paramètre du validateur pour certain type uniquement
*/
public function addValidator($type,$element,$message,$params = null)
{
if(!array_key_exists($element,$this->elementsList))
die('L\element '.$element.' n_existe pas !');
if(array_key_exists($type,$this->allowValidatorList))
{
if(is_array($this->allowValidatorList[$type]) && is_null($params))
die('On attend un tableau en tant que parametre');
elseif(!is_null($this->allowValidatorList[$type]) && !is_array($this->allowValidatorList[$type]))
die('On attend un parametre');
$this->elementsList[$element]['validator'][$type] = array('params' => $params, 'message' => $message);
}
else
die($type.' n\'est pas un validator correct');
}
/**
* Teste si le formulaire est valide
*
* @return array/null Erreurs
*/
public function isValid()
{
if(empty($_POST) && empty($_GET))
die('Impossible de valider un formulaire qui n\'as pas été envoyer');
foreach($this->elementsList as $elementKey => $elementValue)
{
if(isset($elementValue['validator']))
{
foreach($elementValue['validator'] as $key => $value)
{
$validator = 'valid'.ucwords($key);
if(!$this->$validator($_POST[$elementKey],$value['params']))
$this->validationError[] = $value['message'];
}
}
}
return $this->validationError;
}
/**
* Remplace la valeur par defaut de l'element
*
* @param string $element Nom de l'element a modifier
* @param mixed $value Valeur par defaut
*/
public function setValue($element,$value)
{
$this->elementsList[$element]['params']['value'] = $value;
}
/**
* Remet automatiquement les values envoyez a tavers les variables Post dans les éléments
*/
public function setPostValue()
{
if(isset($_POST))
{
foreach($this->elementsList as $key => $value)
{
if(!empty($_POST[$key]) && $value['type'] != 'password')
$this->setValue($key, $_POST[$key]);
}
}
}
/**
*
* Génère le code html du formulaire
*
* @return Code html
*/
public function render()
{
$form = '<form ';
foreach($this->formAttributes as $key => $value)
$form .= $key.'="'.$value.'" ';
$form .= '>';
foreach($this->elementsList as $key => $value)
{
$render = 'render'.ucwords($value['type']);
$form .= '<p>';
$form .= $this->$render($value);
$form .= '</p>'."\n";
}
$form .= '</form>';
return $form;
}
/*
* Ensemble de fonctions génerant les élements du formulaire
*/
private function renderText($attribute)
{
$return = '<label for="'.$attribute['name'].'">'.$attribute['label'].'</label> : ';
$return .= '<input type="text" ';
$return .= 'id="'.$attribute['name'].'" name="'.$attribute['name'].'" ';
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function renderButton($attribute)
{
$return = '<label for="'.$attribute['name'].'">'.$attribute['label'].'</label> : ';
$return .= '<input type="button" ';
$return .= 'id="'.$attribute['name'].'" name="'.$attribute['name'].'" ';
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function renderHidden($attribute)
{
$return = '<input type="hidden" ';
$return .= 'id="'.$attribute['name'].'" name="'.$attribute['name'].'" ';
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function renderPassword($attribute)
{
$return = '<label for="'.$attribute['name'].'">'.$attribute['label'].'</label> : ';
$return .= '<input type="password" ';
$return .= 'id="'.$attribute['name'].'" name="'.$attribute['name'].'" ';
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function renderSubmit($attribute)
{
$return = '<input type="submit" ';
$return .= 'id="'.$attribute['name'].'" ' ;
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function renderCheckbox($attribute)
{
$return = $attribute['label'].' : ';
foreach($attribute['params']['option'] as $key => $value)
{
$return .= '<input type="checkbox" name="'.$key.'" value="'.$value.'" ';
if(isset($attribute['params']['checked']))
if(in_array($key,$attribute['params']['checked']))
$return .= 'checked="true" ';
if(isset($attribute['params']['disabled']))
if(in_array($key,$attribute['params']['disabled']))
$return .= 'disabled="true" ';
$return .= '/> ';
}
return $return;
}
private function renderRadio($attribute)
{
$return = '';
foreach($attribute['params']['option'] as $key => $value)
{
$return .= $key.' : ';
$return .= '<input type="radio" ';
$return .= 'id="'.$key.'" name="'.$attribute['name'].'" value="'.$value.'" ';
if(isset($attribute['params']['checked']))
if(in_array($key,$attribute['params']['checked']))
$return .= 'checked="true" ';
if(isset($attribute['params']['disabled']))
if(in_array($key,$attribute['params']['disabled']))
$return .= 'disabled="true" ';
$return .= '/> ';
}
return $return;
}
/*Todo : Changer ce merdier*/
private function renderSelect($attribute)
{
$return = '';
foreach($attribute['params']['option'] as $key => $value)
{
$return .= $key.' : ';
$return .= '<input type="radio" ';
$return .= 'id="'.$key.'" name="'.$attribute['name'].'" value="'.$value.'" ';
if(isset($attribute['params']['checked']))
if(in_array($key,$attribute['params']['checked']))
$return .= 'checked="true" ';
if(isset($attribute['params']['disabled']))
if(in_array($key,$attribute['params']['disabled']))
$return .= 'disabled="true" ';
$return .= '/> ';
}
return $return;
}
private function renderReset($attribute)
{
$return = '<input type="reset" ';
$return .= 'id="'.$attribute['name'].'" value="'.$attribute['label'].'" ' ;
if(isset($attribute['params']))
{
foreach($attribute['params'] as $key => $value)
$return .= $key.'="'.$value.'" ';
}
$return .= '/>';
return $return;
}
private function validEmail($email)
{
if (preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])+_?@[[:alnum:]]([-.]?[[:alnum:]])+\.[a-z]{2,6}$`',$email))
return true;
else
return false;
}
private function validLenght($string,$params)
{
$lenght = strlen($string);
if($lenght >= $params[0] && $lenght <= $params[1])
return true;
else
return false;
}
private function validRequired($string)
{
if(empty($string))
return false;
else
return true;
}
}
?>
Voila n'hésitez pas a me tailler, lyncher insulter si ca vous chante tant que c'est constructif et que ca peut m'aider :]