Jak na extension methods ve formulářích?
- David Grudl
- Nette Core | 8215
Potřebujete přidat novou metodu do formuláře? Postup, který funguje od Nette 0.9 a bude fungovat i ve verzi 3.0 je tento:
Nette\Forms\Container::extensionMethod('addDate', function ($form, $name, $label = null) {
return $form[$name] = new DateInput($label);
});
// nyní lze psát:
$form->addDate('date', 'Datum:');
Vyhněte se používání třídy ObjectMixin, která je společně se třídou Nette\Object deprecated a nebude fungovat pod PHP 7.2.
Extension metody podporuje i třída
Nette\Forms\Controls\BaseControl
a tedy i její potomci.
- Felix
- Nette Core | 1195
Vice o pridavani novych metod do formularu najdete v blogpostu: https://f3l1x.io/…formularich/
- Ivorius
- Nette Blogger | 119
Bohužel to nefunguje, respektive je to deprecated.
Pokud si v aktuální verzi – Nette\Forms 2.4.6 zavolám Nette\Forms\Container::extensionMethod tak se interně volá Nette\Utils\ObjectMixin::setExtensionMethod což je ale v Nette\Utils 2.5.0 deprecated.
Jaký je tedy správný přístup?
Editoval Ivorius (19. 2. 2018 10:53)
- David Grudl
- Nette Core | 8215
To je bug, bohužel testy na Container::extensionMethod byly jen v nette/forms v3.0, ale ne ve v2.4, takže jsem si toho nevšiml. Bude to opraveno v nette/utils 2.5.1.