Validace dat pomocí Nette/Schema
- Petr Parolek
- Člen | 455
Ahoj,
nette/schema je pro mě velká magie. Jak mám prosím zvalidovat, jestli je vstup integer nebo string, která obsahuje povinný prvek z pole?
try {
$schema = Nette\Schema\Expect::anyOf(
Nette\Schema\Expect::anyOf(
Nette\Schema\Expect::int()
)
);
$processor = new Nette\Schema\Processor;
$processor->process($schema, $displayZoom);
} catch(\Exception $e) {
throw new \InvalidArgumentException;
}
Nenapadá mě, jak zvalidovat pole.
Editoval ppar (26. 1. 2021 17:11)
- David Matějka
- Moderator | 6445
nechápu, co vlastně chceš
jestli je vstup integer nebo string, která obsahuje povinný prvek z pole?
můžeš to přeformulovat nebo ukázat nějaký příklad?
- Petr Parolek
- Člen | 455
Řeším nefunkční validaci vstupu u https://github.com/…Response.php#… . Různě jsem s tím laboroval celý den v čistém PHP a bez úspěchu. Napadlo mě použít nette/schema.
- David Matějka
- Moderator | 6445
takže int nebo hodnotu z enumu?
v tom případě něco jako
Expect::anyOf(Expect::int(), 'foo', 'bar', 'lorem')
ale používat tady v tom tvém případě nette/schema je hroznej overkill
- Petr Parolek
- Člen | 455
Contributte\PdfResponse\InvalidArgumentException was expected, but none was thrown
in tests/PdfResponse/PdfResponse.setters.phpt(25) Tester\Assert::exception()
in contributte-pdf/tests/bootstrap.php(22) {closure}()
in tests/PdfResponse/PdfResponse.setters.phpt(36) test()
- David Matějka
- Moderator | 6445
problém je v té $displayLayout <= 0
podmínce, to se se
stringem začalo chovat v php 8 jinak, viz https://3v4l.org/Qi9He
- David Matějka
- Moderator | 6445
treba
if ((!is_int($displayZoom) || $displayZoom <= 0) && !in_array($displayZoom, [
self::ZOOM_DEFAULT,
self::ZOOM_FULLPAGE,
self::ZOOM_FULLWIDTH,
self::ZOOM_REAL
], true))
- Petr Parolek
- Člen | 455
Stále nefunguje na PHP8.0:
/**
* @param string|int $displayZoom
*/
public function setDisplayZoom($displayZoom): void
{
if ((!is_int($displayZoom) || $displayZoom <= 0) && !in_array($displayZoom, [
self::ZOOM_DEFAULT,
self::ZOOM_FULLPAGE,
self::ZOOM_FULLWIDTH,
self::ZOOM_REAL
], true)) {
throw new InvalidArgumentException("Invalid zoom '" . $displayZoom . "', use PdfResponse::ZOOM_* constants or o positive integer.");
}
$this->displayZoom = $displayZoom;
}
Failed: Contributte\PdfResponse\InvalidArgumentException was expected, but none was thrown
`
Editoval ppar (26. 1. 2021 18:28)
- David Matějka
- Moderator | 6445
a opravdu ti failuje tahle část? protože tam je ještě setDisplayLayout, kde je ta stejná podmínka s <= 0, a tam už vůbec nedává smysl, protože je povolen jen string input
- David Matějka
- Moderator | 6445
in tests/PdfResponse/PdfResponse.setters.phpt(>>> 34 <<<) Tester\Assert::exception()