pouzitie addCondition s addConditionOn

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Matúš Matula
Člen | 257
+
0
-

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
+
0
-

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í:

https://github.com/….toggle.phpt#L16

Matúš Matula
Člen | 257
+
0
-

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)