diff --git a/wip/php/access/AbstractAccess.php b/wip/php/access/AbstractAccess.php index a58fbed..d9df3db 100644 --- a/wip/php/access/AbstractAccess.php +++ b/wip/php/access/AbstractAccess.php @@ -3,6 +3,10 @@ namespace nur\sery\wip\php\access; use nur\sery\cl; +/** + * Class AbstractAccess: implémentation par défaut pour des instances standard + * de {@link IAccess} + */ abstract class AbstractAccess implements IAccess { function inc(): int { $value = (int)$this->get(); diff --git a/wip/php/access/FormAccess.php b/wip/php/access/FormAccess.php index 6318528..daa10af 100644 --- a/wip/php/access/FormAccess.php +++ b/wip/php/access/FormAccess.php @@ -4,12 +4,12 @@ namespace nur\sery\wip\php\access; use nur\sery\cl; /** - * Class GetAccess: accès à une valeur de $_POST puis $_GET, dans cet ordre + * Class FormAccess: accès à une valeur de $_POST puis $_GET, dans cet ordre */ class FormAccess extends AbstractAccess { - function __construct($key, bool $allowEmpty=false) { + function __construct($key, ?array $params=null) { $this->key = $key; - $this->allowEmpty = $allowEmpty; + $this->allowEmpty = $params["allow_empty"] ?? false; } /** @var int|string */ diff --git a/wip/php/access/GetAccess.php b/wip/php/access/GetAccess.php index 7f8c2da..0478675 100644 --- a/wip/php/access/GetAccess.php +++ b/wip/php/access/GetAccess.php @@ -6,17 +6,7 @@ use nur\sery\cl; /** * Class GetAccess: accès à une valeur de $_GET */ -class GetAccess extends AbstractAccess { - function __construct($key, bool $allowEmpty=false) { - $this->key = $key; - $this->allowEmpty = $allowEmpty; - } - - /** @var int|string */ - protected $key; - - protected bool $allowEmpty; - +class GetAccess extends FormAccess { function exists(): bool { $key = $this->key; if ($key === null) return false; diff --git a/wip/php/access/KeyAccess.php b/wip/php/access/KeyAccess.php index 8f3e485..3671c36 100644 --- a/wip/php/access/KeyAccess.php +++ b/wip/php/access/KeyAccess.php @@ -5,12 +5,14 @@ use ArrayAccess; use nur\sery\cl; /** - * Class KeyAccess: accès à une valeur d'un tableau + * Class KeyAccess: accès à une valeur d'une clé dans un tableau */ class KeyAccess extends AbstractAccess { - function __construct(&$dest, $key) { + function __construct(&$dest, $key, ?array $params=null) { $this->dest =& $dest; $this->key = $key; + $this->allowFalse = $params["allow_false"] ?? false; + $this->allowEmpty = $params["allow_empty"] ?? true; } /** @var array|ArrayAccess */ @@ -19,17 +21,30 @@ class KeyAccess extends AbstractAccess { /** @var int|string */ protected $key; + protected bool $allowFalse; + + protected bool $allowEmpty; + function exists(): bool { - return $this->key !== null && cl::has($this->dest, $this->key); + $key = $this->key; + if ($key === null) return false; + return cl::has($this->dest, $key); } function available(): bool { - return $this->exists() && $this->get() !== false; + if (!$this->exists()) return false; + $value = $this->get(); + if ($value === false) return $this->allowFalse; + if ($value === "") return $this->allowEmpty; + return true; } function get($default=null) { if ($this->key === null) return $default; - return cl::get($this->dest, $this->key, $default); + $value = cl::get($this->dest, $this->key, $default); + if ($value === false && !$this->allowFalse) return $default; + if ($value === "" && !$this->allowEmpty) return $default; + return $value; } function set($value): void { diff --git a/wip/php/access/PostAccess.php b/wip/php/access/PostAccess.php index 5c136ce..ddc6329 100644 --- a/wip/php/access/PostAccess.php +++ b/wip/php/access/PostAccess.php @@ -6,17 +6,7 @@ use nur\sery\cl; /** * Class PostAccess: accès à une valeur de $_POST */ -class PostAccess extends AbstractAccess { - function __construct($key, bool $allowEmpty=false) { - $this->key = $key; - $this->allowEmpty = $allowEmpty; - } - - /** @var int|string */ - protected $key; - - protected bool $allowEmpty; - +class PostAccess extends FormAccess { function exists(): bool { $key = $this->key; if ($key === null) return false; diff --git a/wip/php/access/README.md b/wip/php/access/README.md new file mode 100644 index 0000000..13291ca --- /dev/null +++ b/wip/php/access/README.md @@ -0,0 +1,12 @@ +# nulib\php\access + +Les classes de ce package sont des outils unitaires pour accéder en lecture +et/ou écriture à *une* valeur. l'idée est de disposer d'une objet générique +pour accéder à une valeur, qu'il est possible d'utiliser ou de stocker pour une +utilisateur future. + +Ces classes ne sont pas conçues pour être utilisées au jour le jour; elles sont +plutôt comme des briques de base utilisées pour des traitements de plus haut +niveau. + +-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file diff --git a/wip/php/access/DoubleAccess.php b/wip/php/access/ShadowAccess.php similarity index 92% rename from wip/php/access/DoubleAccess.php rename to wip/php/access/ShadowAccess.php index 7c889c7..229bad1 100644 --- a/wip/php/access/DoubleAccess.php +++ b/wip/php/access/ShadowAccess.php @@ -2,7 +2,7 @@ namespace nur\sery\wip\php\access; /** - * Class DoubleAccess: accès en lecture depuis une instance de {@link IAccess} + * Class ShadowAccess: accès en lecture depuis une instance de {@link IAccess} * puis écriture dans une autre instance de {@link IAccess} * * l'objet est initialisé avec deux instances de {@link IAccess}: $reader et @@ -14,7 +14,7 @@ namespace nur\sery\wip\php\access; * - si une méthode de {@link IDeleter} est utilisée, les méthodes de * {@link IGetter} attaquent de nouveau $reader comme initialement */ -class DoubleAccess extends AbstractAccess { +class ShadowAccess extends AbstractAccess { function __construct(IAccess $reader, IAccess $writer) { $this->reader = $reader; $this->writer = $writer;