nur-sery/nur_src/F.php

68 lines
2.3 KiB
PHP

<?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;
}
}