Alors voici mon validates:
public $validate = array(
'add' => array(
'title' => array(
'rule' => array(
'type' => 'string',
'required' => true
)
)
),
'admin_add' => array(
'title' => array(
'rule' => array(
'required' => true,
'allowEmpty' => true
),
'message' => array(
'required' => 'Le champ titre est requis',
'allowEmpty' => 'Veuillez remplir le champ titre'
)
),
'category_id' => array(
'rule' => array(
'required' => true,
'comparison' => array('notequal', 0)
),
'message' => array(
'required' => 'Le champ catégorie est requis',
'comparison' => 'Veuillez remplir le champ catégorie'
)
)
),
'admin_edit' => array(
'title' => array(
'rule' => array(
'required' => true,
'allowEmpty' => true
),
'message' => array(
'required' => 'Le champ titre est requis',
'allowEmpty' => 'Veuillez remplir le champ titre'
)
)
)
);
Ensuite dans le dans Model.php je vérifie si une variable $validates existe dans mon model puis j'explore mon tableau comme ceci:
if($this->validate) {
$this->data = $data;
$d = get_object_vars($this->data);
if($this->request->prefix) {
if($this->request->action != 'edit') {
$a = $this->request->action;
} elseif($this->request->action == 'edit' && $d$this->primaryKey] != null) {
$a = $this->request->prefix.'_edit';
} else {
$a = $this->request->prefix.'_add';
}
} else {
if($this->request->action != 'edit') {
$a = $this->request->action;
} elseif($this->request->action == 'edit' && $d$this->primaryKey] != null) {
$a = 'edit';
} else {
$a = 'add';
}
}
if(isset($this->validate$a])) {
$valid = $this->_validates($a, $this->validate$a]);
}
}
Puis je verifie si ma fonction _validates me return true ou false pour savoir si j'exécute ma requête ou pas.
Voici la fonction:
public function _validates($action, $tab) {
$valid = array();
foreach($tab as $field => $rules) {
if(isset($rules'message'])) {
$message = $rules'message'];
unset($rules'message']);
} else {
$message = null;
}
if(!is_array($rules) || (is_array($rules) && isset($rules'rule']))) {
$rules = array('rule' => $rules);
}
$rules = current($rules);
foreach($rules'rule'] as $k => $v) {
$d = get_object_vars($this->data);
$valid] = call_user_func_array(array('Validate', $k), array($field, $v, $d$field], (isset($message$k])) ? $message$k] : null));
}
}
if(in_array(false, $valid, true)) {
$this->validateError] = call_user_func(array('Validate', '_return'));
return false;
} else {
return true;
}
}
Après ça se corse j'ai modifié pas mal le MVC pour transmettre le request au helper Form.
Ensuite dans le helper Form je fais comme ceci:
public function getModel() {
if($this->controller->model[1]'return']->validateError) {
$this->error = current($this->controller->model[1]'return']->validateError);
}
}
public function input($name, $label, $opt = array()) {
$errorClass = '';
$errorMessage = false;
if($this->controller->request->isPost) {
$this->getModel();
if($this->error) {
$n = count($this->error);
if(preg_match("#([a-zA-Z]+)#", $name, $match)) {
$field = $match[0];
} else {
$field = $name;
}
for($i = 0; $i < $n; $i++) {
if($field == $this->error$i]'field']) {
$errorClass = ' error';
$errorMessage = $this->error$i]'message'];
}
}
}
}
// le reste du code pour mes inputs
}
En faites au moment ou le input se crée j'interroge le model pour savoir si des erreurs existent et si oui je traite mon tableau des erreurs pour voir quel champs est erroné pour lui affiché l'erreur.
Je t'avoue que j'ai bossé pendant 2 jours pour arrivé à se résultat mais je cherche toujours si y a pas un moyen plus facile pour y arrivé.