# Laminas fieldset unable to use custom select with where clause

**URL:** https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601
**Category:** Components & MVC
**Tags:** laminas-form, laminas-mvc
**Created:** [November 17, 2021, 8:20am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601 "2021-11-17T08:20:09Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:20am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/1 "2021-11-17T08:20:09Z")

</div>

I have a laminas form wich contains a fieldset. In this fieldset, I have a custom select Element wich is populate from database with a where clause depending on parameter passed to my fieldset. However, when I use my custom Select, I get this error message \<\<Argument 1 passed to Laminas\ServiceManager\ServiceManager::Laminas\ServiceManager{closure}() must be of the type string, object given, called in…\>\>.

I post my code below : My fieldset here :

```auto
<?php

/**
    * @module Commun
    * @subpackage Form\Admin
    * @author Samuel NANGUI <nanguisamuel@gmail.com>
    * @copyright Copyright (c) 2020 Nslabs
    */

    namespace Commun\Form\Modules\Application\Fieldset;
    
    use Commun\Model\Entity\RapportEffet;
    use Laminas\InputFilter\InputFilterProviderInterface;
    use Laminas\Hydrator\ReflectionHydrator;
    
    use Laminas\Filter\StripTags;
    use Laminas\Filter\StringTrim;
    
    use Commun\Form\CommunFormFieldset;
    use Commun\Form\SelectOptions\EffetsProjetSelect;
    
    class EffetRapportFieldset extends CommunFormFieldset implements InputFilterProviderInterface
    {
            
        
        private $mapper;
        private $inputFilter;   
        private $params;
           
        public function __construct($mappers=[],$params=[], $options = [])
        {        
            $this->mapper = $mappers;
            $this->params = $params;        
            parent::__construct($this->mapper,'EffetRapportForm',$options);           
            $this->setHydrator(new ReflectionHydrator());
            $this->setObject(new RapportEffet());          
            
        }
        
            
        public function init() {       
            //parent::init();  
            //var_dump($this->params);
            //$idProjet = $this->params;        
            //$optionsEffetCadreLogique = $this->mapper['effetProjet']->getOptions('idEffetProjet','libelleEffet','Selectionner',['idProjet' => $idProjet],['libelleEffet']);                                         
            //$this->addSelect('idEffetProjet', 'Intitule de l\'effet',[],['class' => 'form-control'],'champ-requis'); 
            $mySelect = $this->getFormFactory()->getFormElementManager()->get(EffetsProjetSelect::class, ['params' => $this->params]);                
            //$this->addSelectFromTable('idEffetProjet','Intitule de l\'effet', $mySelect,['class' => 'form-control champ-affiche'],'champ-requis');
            $this->add([            
                'name' => 'idEffetProjet',              
                'type' => $mySelect,            
                'options' => [
                    'label' => 'Intitule de l\'effet',  
                    'label_attributes' => [
                        'class' => 'form-control champ-affiche'
                    ],               
                ],            
                'attributes' => 'champ-requis',
            ]); 
            $this->addText('valeurReference','Valeur de référence (a)',NULL,['class' => 'form-control champ_decimal champ-affiche champ_valeur_reference'],'champ-requis');
            $this->addText('valeurRecente','Valeur la plus récente (b)',NULL,['class' => 'form-control champ_decimal champ_valeur_recente'],'champ-requis');
            $this->addText('cibleFinale','Cible finale (c)',NULL,['class' => 'form-control champ_decimal champ-calcule champ_valeur_cible'],'champ-requis');
            $this->addText('progresRealisation','Progrès vers la réalisation de la cible (% de réalisation) (d=b/c)',NULL,['class' => 'form-control champ_decimal champ-affiche champ_valeur_progres'],'champ-requis');
            $this->addTextarea('evaluation', 'Évaluation', NULL, ['class' => 'form-control','rows' => 3]);               
        }
        
            
        /**
         * @return array
         */
        public function getInputFilterSpecification()
        {
            return [
                
            ];       
        }
    }

```

My custom Select here :

```auto
<?php

/**
    * @module Commun
    * @subpackage Form\Admin
    * @author Samuel NANGUI <nanguisamuel@gmail.com>
    * @copyright Copyright (c) 2021 Nslabs
    */

namespace Commun\Form\SelectOptions;

use Laminas\Form\Element\Select;

class EffetsProjetSelect extends Select 
{
     
    private $repository;
    private $params;
    public function __construct($repository,$params)
    {        
        //parent::__construct($name, $options);
        $this->repository = $repository;                
        $this->params = $params;
    }
        
    /**
     * Initialize the element
     *
     * @return void
     */
    public function init() {        
        $idProjet=$this->params;
        //var_dump($idProjet);
        $options = $this->repository->getOptions('idEffetProjet','libelleEffet','Sélectionner',['idProjet' => $idProjet],NULL);                                                 
        //$options = $this->repository->getOptions('idEffetProjet','libelleEffet','Sélectionner',NULL,['libelleEffet']);                                                 
        $this->setValueOptions($options);
    } 
  
}

```

The factory for my custom Select

```auto
<?php

/**
    * @module Commun
    * @subpackage Form
    * @author Samuel NANGUI <nanguisamuel@gmail.com>
    * @copyright Copyright (c) 2020 Nslabs
    */

namespace Commun\Factory\Form\SelectOptions;

use Interop\Container\ContainerInterface;
use Laminas\ServiceManager\Factory\FactoryInterface;
use Commun\Form\SelectOptions\EffetsProjetSelect;

class EffetsProjetSelectFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {                
        $params = $options['params'] ?? [];
        unset($options['params']);    
        $mapper=$container->get('TEFFETPROJET');       
        return new EffetsProjetSelect($mapper,$params);
    }
}

```

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [November 17, 2021, 8:32am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/2 "2021-11-17T08:32:06Z")

</div>

I think the `mapper` property of `EffetRapportFieldset` is misleading here. Can you remove it?

> [@ebuddy](#):
>
> I have a custom select Element wich is populate from database

Have you registered your custom element? See the configuration key `form_elements`:

> **[Advanced Use Cases - laminas-form - Laminas Docs](https://docs.laminas.dev/laminas-form/v3/advanced/#creating-custom-elements)**
>
> Validate and display simple and complex forms, casting forms to business objects and vice versa.

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:34am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/3 "2021-11-17T08:34:20Z")

</div>

Yes I have registered my form Element like this :

```auto
'form_elements' => [
        'factories' => [   
            Form\Modules\Application\Fieldset\ProjetFieldset::class => Factory\Form\Fieldset\ProjetFieldsetFactory::class,
            Form\Modules\Application\Fieldset\EffetFieldset::class => Factory\Form\Fieldset\EffetFieldsetFactory::class,
            Form\Modules\Application\Fieldset\ComposanteFieldset::class => Factory\Form\Fieldset\ComposanteFieldsetFactory::class,
            Form\Modules\Application\Fieldset\ProduitFieldset::class => Factory\Form\Fieldset\ProduitFieldsetFactory::class,
            Form\Modules\Application\Fieldset\ActiviteFieldset::class => Factory\Form\Fieldset\ActiviteFieldsetFactory::class,
            Form\Modules\Application\Fieldset\DocFieldset::class => Factory\Form\Fieldset\DocFieldsetFactory::class,
            Form\Modules\Application\Fieldset\RealisationImpactFieldset::class => Factory\Form\Fieldset\RealisationImpactFieldsetFactory::class,  
            Form\Modules\Application\Fieldset\EffetRapportFieldset::class => Factory\Form\Fieldset\EffetRapportFieldsetFactory::class,
            Form\Modules\Application\Fieldset\RapportEffetFieldset::class => Factory\Form\Fieldset\RapportEffetFieldsetFactory::class,
            Form\Modules\Application\RapportEffetForm::class => Factory\Form\RapportEffetFormFactory::class,
            
            //Select Options
            Form\SelectOptions\RefNotationSelect::class => Factory\Form\SelectOptions\RefNotationSelectFactory::class,
            Form\SelectOptions\EffetsProjetSelect::class => Factory\Form\SelectOptions\EffetsProjetSelectFactory::class,            
        ],        
    ],

```

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:36am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/4 "2021-11-17T08:36:21Z")

</div>

I started removing $mapper from my form and fieldset as you recommended. I do not use this mapper in my fieldset and I will remove it.

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [November 17, 2021, 8:36am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/5 "2021-11-17T08:36:48Z")

</div>

I mean here in your example!

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [November 17, 2021, 8:38am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/6 "2021-11-17T08:38:02Z")

</div>

> [@ebuddy](#):
>
> I get this error message \<\<Argument 1 passed to Laminas\ServiceManager\ServiceManager::Laminas\ServiceManager{closure}() must be of the type string, object given, called in…\>\>.

Can you provide the entire error message with stack trace?

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:39am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/7 "2021-11-17T08:39:13Z")

</div>

> [@ebuddy](#):
>
> ```auto
> 'form_elements' => [
> 'factories' => [   
> Form\Modules\Application\Fieldset\ProjetFieldset::class => Factory\Form\Fieldset\ProjetFieldsetFactory::class,
> Form\Modules\Application\Fieldset\EffetFieldset::class => Factory\Form\Fieldset\EffetFieldsetFactory::class,
> Form\Modules\Application\Fieldset\ComposanteFieldset::class => Factory\Form\Fieldset\ComposanteFieldsetFactory::class,
> Form\Modules\Application\Fieldset\ProduitFieldset::class => Factory\Form\Fieldset\ProduitFieldsetFactory::class,
> Form\Modules\Application\Fieldset\ActiviteFieldset::class => Factory\Form\Fieldset\ActiviteFieldsetFactory::class,
> Form\Modules\Application\Fieldset\DocFieldset::class => Factory\Form\Fieldset\DocFieldsetFactory::class,
> Form\Modules\Application\Fieldset\RealisationImpactFieldset::class => Factory\Form\Fieldset\RealisationImpactFieldsetFactory::class,  
> Form\Modules\Application\Fieldset\EffetRapportFieldset::class => Factory\Form\Fieldset\EffetRapportFieldsetFactory::class,
> Form\Modules\Application\Fieldset\RapportEffetFieldset::class => Factory\Form\Fieldset\RapportEffetFieldsetFactory::class,
> Form\Modules\Application\RapportEffetForm::class => Factory\Form\RapportEffetFormFactory::class,
>             
> //Select Options
> Form\SelectOptions\RefNotationSelect::class => Factory\Form\SelectOptions\RefNotationSelectFactory::class,
> Form\SelectOptions\EffetsProjetSelect::class => Factory\Form\SelectOptions\EffetsProjetSelectFactory::class,            
> ],        
> ],
> 
> ```

I need to say that RefNotationSelect is working well because there is not param on it.  
But the second one stucks … 😒

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:40am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/8 "2021-11-17T08:40:24Z")

</div>

![errorfrosch](https://canada1.discourse-cdn.com/flex032/uploads/zendframework/original/2X/6/62bdaa2281030cf302b26dc1539d30bf2b10d181.png)  
Here it is

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [November 17, 2021, 8:44am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/9 "2021-11-17T08:44:55Z")

</div>

The important part is missing: Stack #0 – which object? `EffetsProjetSelect` or `RefNotationSelectFactory`?

And which version of laminas-servicemanager do you use? The line numbers do not match with version 3.10.0.

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:49am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/10 "2021-11-17T08:49:36Z")

</div>

here is the complete line

First message :  
`Argument 1 passed to Laminas\ServiceManager\ServiceManager::Laminas\ServiceManager\{closure}() must be of the type string, object given, called in C:\wamp\www\sigpme\vendor\laminas\laminas-servicemanager\src\ServiceManager.php on line 270`

Stack :  
`#0 C:\wamp\www\sigpme\vendor\laminas\laminas-servicemanager\src\ServiceManager.php(270): Laminas\ServiceManager\ServiceManager::Laminas\ServiceManager\{closure}(Object(Commun\Form\SelectOptions\EffetsProjetSelect))`

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 8:51am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/11 "2021-11-17T08:51:05Z")

</div>

And where can I get the version of laminas-servicemanager ?

---

<div class="post-metadata">

### Author: ![froschdesign](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/froschdesign/32/38_2.png) [@froschdesign](https://discourse.laminas.dev/u/froschdesign)
#### Post date: [November 17, 2021, 8:59am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/12 "2021-11-17T08:59:51Z")

</div>

Found the problem. This does not work:

```php
$this->add(['type' => new MyElement()]);

```

The method `add` calls the form element manager again via the factory, if an array is given.

Use:

```php
$this->add(new MyElement());

```

> <https://github.com/laminas/laminas-form/blob/c6a69c93e9c445b9a2e08cd7a4746bc724bd4ffe/src/Form.php#L169-L188>

> <https://github.com/laminas/laminas-form/blob/c6a69c93e9c445b9a2e08cd7a4746bc724bd4ffe/src/Fieldset.php#L142-L189>

---

<div class="post-metadata">

### Author: ![ebuddy](https://yyz2.discourse-cdn.com/flex032/user_avatar/discourse.laminas.dev/ebuddy/32/1536_2.png) [@ebuddy](https://discourse.laminas.dev/u/ebuddy)
#### Post date: [November 17, 2021, 9:01am UTC](https://discourse.laminas.dev/t/laminas-fieldset-unable-to-use-custom-select-with-where-clause/2601/13 "2021-11-17T09:01:19Z")

</div>

Ok let me try and I will get back to you in 10min max
