addConditionOn nad checkboxem

Allconius
Člen | 313
+
0
-

Ahoj, mám checkbox:

<?php
        $form->addCheckbox('db', ' Přístup k informačním databázím')
            ->setDefaultValue(0)
            ->addCondition($form::EQUAL, true)
            ->toggle('db-group')
.....
?>

a u něj addCondition, to je ok, ale když chci přidat u radiobutonu addConditionOn na stejný prvek:

<?php
        $form->addRadioList("ou",'',$ouvarianta)
            ->setOption('id', 'db-ou')
            ->getSeparatorPrototype()->setName('');
            ->addConditionOn($form['db'],Form::EQUAL, true)
            ->setRequired('Přístup k osobním údajům je potřeba vyplnit.');
?>

tak mi to vyhodí error:
Error
Object of class Nette\Forms\Controls\Checkbox could not be converted to string

Jak mám nastavit addConditionOn že je ‚db‘ zaškrtnutý ?

David Matějka
Moderator | 6445
+
0
-

ten zápis mi připadá v pořádku. můžeš poslat celou tracy, kde bude vidět call stack?

Allconius
Člen | 313
+
0
-

Error

Object of class Nette\Forms\Controls\Checkbox could not be converted to string search►
…/vendor/nette/utils/src/Utils/Html.php:507 Nette\Utils\Html->appendAttribute()

…/app/Presenters/HomepagePresenter.php:298 Nette\Utils\Html->__call()

288: ->setOption(‚id‘, ‚db-aplikace‘)
289: ->setOption(‚description‘,‚Pro výběr více aplikací/agend stiskněte klávesu Ctrl‘)
290: ->addConditionOn($form[‚db‘], Form::EQUAL, TRUE)
291: ->setRequired(‚Není vybrána žádná aplikace nebo agenda.‘);
292:
293: $ouvarianta = array(‚Žádám o přístup k osobním údajům‘=>' Žádám ‚,'Nežádám o přístup k osobním údajům‘=>' nežádám o přístup k osobním údajům');
294:
295: $form->addRadioList(„ou“,'',$ouvarianta)
296: ->setOption(‚id‘, ‚db-ou‘)
297: ->getSeparatorPrototype()->setName('')
298: ->addConditionOn($form[‚db‘],Form::EQUAL, true)
299: ->setRequired(‚Přístup k osobním údajům je potřeba vyplnit.‘);
300:
301: $form->addTextArea(‚dboduvodneni‘, ‚Odůvodnění žádosti:‘)
302: ->setOption(‚description‘, '')
…/src/ComponentModel/Container.php:159 App\Presenters\HomepagePresenter->createComponentOmiForm()

…/src/ComponentModel/Container.php:122 Nette\ComponentModel\Container->createComponent()

/data/docs/www/html/omi/formular/temp/cache/latte/templates-Homepage-default.latte–abae036d97.php:45 Nette\ComponentModel\Container->getComponent()

…/latte/src/Latte/Runtime/Template.php:273 Templateabae036d97->blockContent()

/data/docs/www/html/omi/formular/temp/cache/latte/Presenters-templates-@layout.latte--a82a4e3146.php:185 Latte\Runtime\Template->renderBlock()

…/latte/src/Latte/Runtime/Template.php:186 Templatea82a4e3146->main()

…/latte/src/Latte/Runtime/Template.php:162 Latte\Runtime\Template->render()

…/vendor/latte/latte/src/Latte/Engine.php:87 Latte\Runtime\Template->render()

…/Bridges/ApplicationLatte/Template.php:50 Latte\Engine->render()

…/Application/Responses/TextResponse.php:50 Nette\Bridges\ApplicationLatte\Template->render()

…/src/Application/Application.php:157 Nette\Application\Responses\TextResponse->send()

…/src/Application/Application.php:85 Nette\Application\Application->processRequest()

…/docs/www/html/omi/formular/www/index.php:10 Nette\Application\Application->run()

Allconius
Člen | 313
+
0
-

Přitom na řádku 290 je to samý a to projde divný

nightfish
Člen | 472
+
0
-

Problém je, že voláš addConditionOn() po getSeparatorPrototype():

$form->addRadioList("ou",'',$ouvarianta)
            ->setOption('id', 'db-ou')
            ->getSeparatorPrototype()->setName('') # tady je problém, protože getSeparatorPrototype() vrací Html
            ->addConditionOn($form['db'],Form::EQUAL, true)
            ->setRequired('Přístup k osobním údajům je potřeba vyplnit.');

Řešením je rozdělit to na víc částí, třeba takto:

$radioList = $form->addRadioList("ou",'',$ouvarianta)
            ->setOption('id', 'db-ou');
$radioList->getSeparatorPrototype()->setName('');
$radioList->addConditionOn($form['db'],Form::EQUAL, true)
            ->setRequired('Přístup k osobním údajům je potřeba vyplnit.');
Allconius
Člen | 313
+
0
-

Ahoj, díky nakonec jsem vyhodil to getSeparatorPrototype(), dá se ta podmínka zdvojit tzn. že by bylo:

<?php
        $form->addRadioList("ou",'',$ouvarianta)
            ->setOption('id', 'db-ou')
			->addConditionOn($form['db'], Form::EQUAL, TRUE)
            ->addConditionOn($form['opravneni1'], Form::EQUAL, 1)
            ->setRequired('Přístup k osobním údajům je potřeba vyplnit.');


?>

?

Allconius
Člen | 313
+
+1
-

vyzkoušeno, to addConditionOn jde vrstvit takže OK :-)