Me gusta envolver $_SESSION
, $_POST
, $_GET
y $_COOKIE
en estructuras OOP.
que utiliza este método para centralizar el código que se encarga de saneamiento y validación, todos los isset()
controles necesarios, nonces, setcookie
parámetros, etc. También permite código de cliente que sea más fácil de leer (y me da la ilusión de que es más fácil de mantener)
Puede ser difícil imponer el uso de este tipo de estructura, especialmente si hay varios codificadores. Con $_GET
, $_POST
y $_COOKIE
(creo), su código de inicialización puede copiar los datos, luego destruir el superglobal. Tal vez un destructor inteligente podría hacer esto posible con $ _SESSION (borrar $ _SESSION en la carga, escríbalo en el destructor), aunque no lo he intentado.
No suelo utilizar ninguna de estas técnicas de aplicación. Después de acostumbrarme, ver $_SESSION
en el código fuera de la clase de sesión parece extraño, y trabajo principalmente solo.
EDITAR
Aquí hay un código de cliente de ejemplo, en el caso de que ayuda a alguien. Estoy seguro de mirar a cualquiera de los principales marcos que le dará mejores ideas ...
$post = Post::load();
$post->numeric ('member_age');
$post->email ('member_email');
$post->match ('/regex/','member_field');
$post->required ('member_first_name','member_email');
$post->inSet ('member_status',array('unemployed','retired','part-time','full-time'));
$post->money ('member_salary');
$post->register ('member_last_name'); // no specific requirements, but we want access
if ($post->isValid())
{
// do good stuff
$firstName = $post->member_first_name;
}
else
{
// do error stuff
}
Post y sus amigos todos se derivan de una clase base que implementa el código de validación núcleo, añadiendo su propia funcionalidad específica como la forma tokens, configuración de cookies de sesión, lo que sea.
Internamente, la clase contiene una colección de datos válidos que se extrae de $_POST
a medida que se llaman los métodos de validación, luego los devuelve como propiedades usando el método __get
mágico. Los campos fallidos no se pueden acceder de esta manera.Mis métodos de validación (excepto required
) no fallan en los campos vacíos, y muchos de ellos usan func_get_args
para permitirles operar en múltiples campos a la vez. Algunos de los métodos (como money
) traducen automáticamente los datos en tipos de valores personalizados.
En el caso de error, tengo una manera de transformar los datos en un formato que se puede guardar en la sesión y se utiliza para completar previamente el formulario y resaltar los errores después de redirigir al formulario original.
Una forma de mejorar esto sería almacenar la información de validación en una clase de formulario que se utiliza para procesar la validación del formulario y la potencia del lado del cliente, así como para limpiar los datos después del envío.
Mueva los datos que necesita a las variables, después de validarlos, ya que los datos allí son sospechosos hasta que se validen. –
Su enfoque es poco común, y aliasing el superglobal en un atributo local podría confundir a los desarrolladores de código. Pero es ciertamente legal, y si su objeto lo utiliza o lo filtra (por ejemplo, un asistente de configuración) probablemente sea una buena idea. – mario