If only the select element needs entries from a database then you can create a separate form element with the required dependencies.
-
Create the element:
class CountrySelectElement extends Laminas\Form\Element\Select { // … public function init() { $this->setName('country_id'); $this->setLabel('Countries'); $this->setValueOptions($categories->fetchAllCountries()); // … } }
-
Create a factory for the element.
-
Register the new element:
return [ 'form_elements' => [ 'factories' => [ CountrySelectElement::class => CountrySelectElementFactory::class, ], ], // … ];
-
Usage in a form:
class MyForm extends Laminas\Form\Form { public function init() { $this->add(['type' => CountrySelectElement::class]); } }
This allows the element to be reused without factories for forms.