Nette Schema anyOf() v arrayOf()
- baraja
- Nette Blogger | 29
Ahoj,
snažím se přijít na to, jak do arrayOf()
vložit validaci
anyOf()
.
Nyní používám toto schéma (momentálně nefunguje):
'routing' => Expect::arrayOf( // (route [*] => rules)
Expect::arrayOf( // (rule => definition)
Expect::anyOf([
Expect::string(), // URL
Expect::structure([
'source' => Expect::string()->required(),
'format' => Expect::string()->required(),
]),
])->firstIsDefault()
),
Expect::anyOf(Expect::string()->required()),
)
Testovací struktura:
routing:
*:
- https://unpkg.com/vue@2.6.12/dist/vue.min.js
- https://unpkg.com/bootstrap-vue@2.17.0/dist/bootstrap-vue.min.js
- https://unpkg.com/bootstrap@4.6.0/dist/css/bootstrap.min.css
- https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.css
-
source: 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;500&family=Work+Sans:wght@100;300;600&display=swap'
format: css
Front:Homepage:default:
- js/reservation-form.js
Dostávám tuto chybu:
The item ‚assetsLoader › routing › Front:Test:detail › 0‘ expects to be array, ‚test.js‘ given.
Prosím, napadá vás, jak by šlo schéma upravit tak, aby položkou
definice mohl být jak string, tak struktura uvedená jako poslední položka?
Momentálně to musím obcházet tak, že to validuji proti typu
mixed()
a pak si to ošetřuji aplikačně, což mi nepřijde
šikovné řešení.
Myslím, že je zápis validní a problém bude spíše v balíku. Vypadá
to, že schéma nepodporuje vložení anyOf()
do
arrayOf()
.
Rel: https://github.com/…f7688cb4e87b
Díky.
Editoval baraja (30. 5. 2021 16:14)
- Marek Bartoš
- Nette Blogger | 1263
anyOf přijímá variadický parametr, ne pole. Takže takto
'routing' => Expect::arrayOf( // (route [*] => rules)
Expect::arrayOf( // (rule => definition)
Expect::anyOf(
Expect::string(), // URL
Expect::structure([
'source' => Expect::string()->required(),
'format' => Expect::string()->required(),
]),
)->firstIsDefault()
),
Expect::anyOf(Expect::string()->required()),
)