Export do JSON Schema
Vaše schéma už je přesným popisem toho, co smí konfigurace obsahovat, a ten popis se hodí i mimo PHP. Vyexportované do JSON Schema umožní editorům:
- nabízet doplňování klíčů a hodnot přímo v konfiguračním souboru
- podtrhnout chyby dřív, než se aplikace vůbec spustí
- ukazovat popisy voleb jako nápovědu
Export
Metoda JsonSchema::export() vytvoří z vašeho schématu dokument JSON
Schema, tedy formát, který čtou editory, aby rovnou v JSON nebo YAML souboru nabízely doplňování a
podtrhávaly chyby:
use Nette\Schema\Expect;
use Nette\Schema\JsonSchema;
$schema = Expect::structure([
'host' => Expect::string('localhost')->description('Database server hostname'),
'port' => Expect::int(3306)->min(1)->max(65535),
'user' => Expect::string()->required(),
]);
echo json_encode(JsonSchema::export($schema), JSON_PRETTY_PRINT);
{
"type": "object",
"properties": {
"host": {"type": "string", "description": "Database server hostname"},
"port": {"type": "integer", "minimum": 1, "maximum": 65535},
"user": {"type": "string"}
},
"required": ["user"],
"additionalProperties": false
}
Výsledek uložte do souboru a nasměrujte na něj svůj editor; jak přesně, záleží na editoru a na formátu konfiguračního souboru.
Co export obsahuje
Export popisuje tvar dat: typy, rozsahy, regulární výrazy, povinné položky, hodnoty výčtů a texty, které jste přidali metodou description().
Výchozí hodnoty, castTo() a transform() v něm záměrně nejsou, protože popisují, co se
s daty děje až po validaci, a to JSON Schema vyjádřit neumí.
Typ, který existuje jen v PHP, třeba třídu (Expect::type(Address::class)), callable nebo resource, exportovat
vůbec nelze. Místo dokumentu, který by potichu popisoval něco jiného, export vyhodí
Nette\NotSupportedException. Totéž platí pro vlastní
prvek, jehož pravidla export znát nemůže.
Rozdíly oproti validaci
Mezi exportem a validací zůstávají dva rozdíly. JSON Schema měří délku řetězce ve znacích, kdežto
Expect::string() v bajtech, proto pro text, který není čisté ASCII, použijte Expect::unicode(). A
pattern() se exportuje tak, jak je, ale validátor JSON Schema ho čte jako regulární výraz ECMAScriptu, takže
konstrukce specifické pro PCRE tam mohou být pochopeny jinak.