Jak na extension methods ve formulářích?

David Grudl
Nette Core | 8215
+
+10
-

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

Vice o pridavani novych metod do formularu najdete v blogpostu: https://f3l1x.io/…formularich/

Ivorius
Nette Blogger | 119
+
+2
-

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

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.