3

I'm learning zf2 and I'm facing a problem involving 2 (eventually more) modules working together. Note, I've carefully read this post (and the related one) which helped me a lot. I'm going to explain a bit the problem:

  • Using the first module (FrOption) an administrator can manage website form options. All options are stored in a db table like this:

id|field_name|field_value
1|country|germany|
2|country|france|
3|gender|Male|
4|gender|Female|
5|tipo|Car|
6|tipo|Fly|
...

  • In my module (FrItem) I've built a form which needs some "field_name" fields. My "item" table is the following:

id|name|id_tipo|
1|Fiat|5|
2|Lufthansa|6|
3|Ford|5|
4|Air France 6|
...

(id_tipo is an option FK)

Also consider:

  • My entity has the "tipo" property, setter + getter
  • I've built an ItemHydrator to "map" id_tipo db field to "tipo" entity property
  • As a test, I've added this field in my form class and everything works fine both in view and edit mode:

    $this->add(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'id_tipo',
    'options' => array (
        'label' => 'Tipo', 
        'empty_option' => 'Select',
        'value_options' => array ('5' => 'Car', '6' => 'Fly' ) )
    

    );

Now i want to "link" the two modules: value_options should be a dynamic array coming from FrOption so I'm looking for the the best way to accomplish this requirement.

I thought one solution could be something like this:

  1. Add to my FrOption/src/FrOption/Service/FrOption.php Service class the getOptionByName($fieldName) method
  2. In FrItem/Module.php retrieve the Service, then the data using getOptionByName and finally inject all into the Form.

Could this be a wise and working solution? What do you thing about it also in terms of performance (option table could grow)? If any, what kind of solution have you used to solve a similar problem?

Thanks

4

1 に答える 1