Handling Laminas Forms with Dependencies - the view results

If only the select element needs entries from a database then you can create a separate form element with the required dependencies.

  1. Create the element:

    class CountrySelectElement extends Laminas\Form\Element\Select
    {
        // …
    
        public function init()
        {
            $this->setName('country_id');
            $this->setLabel('Countries');
            $this->setValueOptions($categories->fetchAllCountries());
            // …
        }
    }
    
  2. Create a factory for the element.

  3. Register the new element:

    return [
        'form_elements' => [
            'factories' => [
                CountrySelectElement::class => CountrySelectElementFactory::class,
            ],
        ],
        // …
    ];
    
  4. 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.

2 Likes