<?php namespace nur; use nur\b\values\Mparams; /** * Class F: gestion unifiée des paramètres POST + GET */ class F extends Mparams { /** tester si le paramètre $name existe dans $_POST ou $_GET */ static final function has($name): bool { if ($name === null || $name === false) return false; elseif (array_key_exists($name, $_POST)) return true; elseif (array_key_exists($name, $_GET)) return true; else return false; } /** obtenir le paramètre $name en cherchant dans $_POST puis $_GET */ static final function get($name, $default=null, bool $trim=false) { if ($name === null || $name === false) $value = $default; elseif (array_key_exists($name, $_POST)) $value = $_POST[$name]; elseif (array_key_exists($name, $_GET)) $value = $_GET[$name]; else $value = $default; if ($trim) $value = str::trim($value); return $value; } /** * modifier le paramètre. * * - s'il provenait de $_POST, modifier $_POST * - s'il provenait de $_GET, modifier $_GET * - sinon modifier $_POST */ static final function set(string $name, ?string $value): void { if (array_key_exists($name, $_POST)) $_POST[$name] = $value; elseif (array_key_exists($name, $_GET)) $_GET[$name] = $value; else $_POST[$name] = $value; } /** obtenir la liste des clés définies dans les paramètres */ protected static final function get_names(): array { return array_keys(array_merge( array_fill_keys(array_keys($_POST), true), array_fill_keys(array_keys($_GET), true), )); } /** * retourner une liste des paramètres qui ont été passés, en les sélectionnant * selon le contenu de $includes et $excludes. ensuite, fusionner le tableau * $merge s'il est spécifié * * pour être sélectionné, un paramètre ne doit pas être dans $excludes, et si * $includes n'est pas null, doit être dans $includes */ static final function select(?array $includes=null, ?array $excludes=null, ?array $merges=null): array { $params = []; foreach (self::get_names() as $name) { if ($excludes !== null && in_array($name, $excludes)) continue; if ($includes !== null && !in_array($name, $includes)) continue; $params[$name] = self::get($name); } if ($merges !== null) $params = array_merge($params, $merges); return $params; } }