Cita: Estimado:
Primero no entiendo para qué necesitas hacer todo esto.
Gracias por la respuesta primero de todo. Si, reconozco que el post puede ser un poco ambiguo, no había dormido. La cuestión es que quería hacer una clase para validar inputs (validar formularios). Pues es un engorro cuando tienes que hacer algo y validar a mano. Para ello de momento hice esto:
Código PHP:
class InputValidator {
private $_method;
private $_errorList = array();
public function __construct($method = NULL) {
$this->unsetErrorList(); // Limpia el array de errores
if(isset($method)) {
$this->_method = $method;
}
}
public function setMethod($method){
$this->_method = $method;
}
public function getMethod(){
return $this->method;
}
/* Como no supe crear una variable dinámica en función del valor
de $this->method hice este metodo provisional que discrimina entre
POST o GET explicitamente y devuelve la variable de cada caso...
Lo que pretendía era, un metodo que en función de pasarle el nombre
de la clave de 'x' tipo superglobal, este generase la variable y retornase su valor.
De esta forma ganaría en genericidad y flexibilidad. Pienso.
*/
public function getNameValue($field) {
if ($this->_method == "POST") {
return $_POST[$field];
}
if ($this->_method == "GET") {
return $_GET[$field];
}
}
// Un filtro isEmpty
public function isEmpty($field, $msg) {
$value = $this->getNameValue($field); // En cada filtro obtendría el valor del campo, sin importar de donde viene no solo get o post
if (trim($value) == "") {
$this->_errorList[] = array("field" => $field, "value" => $value, "msg" => $msg);
return false;
} else {
return true;
}
}
// Retorna el array de errores para ser manejado...
public function getErrorList() {
return $this->_errorList;
}
// Comprueba el nº de errores
public function isError() {
if (sizeof($this->_errorList) > 0) {
return true;
} else {
return false;
}
}
// resetea la lista de errores
public function unsetErrorList(){
$this->_errorList = array();
// También... unset($this->_errorList);
}
}
Luego para usarlo sería básicamente algo así:
Código PHP:
<?php
$iv = new InputValidator();
$iv->setMethod("GET");
$iv->isEmpty('user', 'El campo "Usuario" no puede estar vacío.');
if ($iv->isError()){
echo "Hay errores <BR />";
$errors = $iv->getErrorList();
echo "<ul>";
foreach ($errors as $e) {
echo "<li>" . $e['field'] . "<BR />" . $e['value'] . "<BR />" . $e['msg'];
}
echo "</ul>";
} else {
echo "No hay errores";
}
?>
Y aunque al usar la clase solo defines un metodo (setMethod("x"))... si puedo hacer directamente la función que obtiene los valores para que soporte otros tipos de input, es lo que preferiría hacer. Por que los filtros podría hacerlos indistintamente. Me interesaba hacerlo así por no tener que incluir el tipo de input en la firma de los metodos de filtro. De esta forma lo trabajaría de forma interna. Simplicando el uso.
Cita: Segundo, tanto problema con un array de sistema?
Si es un array, recórrelo y punto, ahí tienes todos los elementos para cargarlos dinámicamente, no necesitas "variables variables".
¿ Con array de sistema te refieres a las SUPERGLOBALES ? Como digo, sabría discriminar explicitamente entre un tipo o otro de superglobal, por simple control de flujo, pero... no cargarlo dinámicamente. Mi creatividad no me da... :S
Cita: Y si no quieres diferenciar entre GET y POST, usa REQUEST.
Lo tengo en mente, pero no sé si me interesa tratar todos los input como un solo tipo... No quiero perder la identidad de que tipo de input viene... si post, get, session etc...