pouzitie addCondition s addConditionOn
- Matúš Matula
- Člen | 257
ahoj,
daju sa pouzivat addCondition()
a addConditionOn()
ako
zlozene podmienky? Priklad nizsie by mal zobrazit kontajner
bind_reports_2_companiesBox
iba ak roles
(multiselect)
ma 1 z danych hodnot A ZAROVEN je zaskrtnuty checkbox
has_reports_allowed
. Zda sa, ze to berie vzdy iba poslednu
podmienku- bug | feature?
v podedenom Nette\Application\UI\Form mam nasledovne
$this->addCheckbox('has_reports_allowed', 'Prístup k Pohľadom')
->addConditionOn($this['roles'], $this::IS_IN, array(\Models\Users::UL_BASIC_APPROVER_ID, \Models\Users::UL_SUPER_APPROVER_ID, \Models\Users::UL_APPROVER_ID))
->addCondition($this::EQUAL, true)
->toggle('bind_reports_2_companiesBox')
->endCondition();
$this->addGroup()
->setOption('container', \Nette\Utils\Html::el('div')->id('bind_reports_2_companiesBox'));
$this->addCheckbox('bind_reports_2_companies', 'Viazať Pohľady na priradené firmy');
- frosty22
- Člen | 373
No vzhledem k existenci elseCondition a endCondition, tak bych řekl že by to asi mělo fungovat. A v testech se dokonce podobné konstrukce i testují, ale tedy tato kombinace tam zrovna není:
- Matúš Matula
- Člen | 257
tak som prisiel na to, ze to funguje a zrada je v tom pravidle
Form::IS_IN
, kt. je v podstate Form::EQUAL
, a teda ak
v MultiSelecte vyberiem okrem hodnoty z pola, voci ktoremu validujem, aj inu
hodnotu, tak uz to neprejde.
$allowed = [1,2,3];
$values = [1]; // IS_IN => TRUE
$values = [1,5]; // IS_IN => FALSE
Pre takyto use case by bolo vhodne nove pravidlo pre multiselect, napr.
CONTAIN
– vrati true ak aspon 1 vybrana hodnota sa nachadza
v poli, voci kt. validujeme.
Uvazujem spravne alebo uz na to je nejaky Nette sposob?
Edit: pribuzna tema https://forum.nette.org/…unctionality
Edit2: pull request
Editoval Matúš Matula (21. 8. 2013 1:20)