存储架构

Form zf2: fills the selection field with the data from the database

微信扫一扫,分享到朋友圈

Form zf2: fills the selection field with the data from the database
0

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' => 'ZendFormElementSelect',
    '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

This can be done easily by following the below 2 steps in Zend Framework2 Step 1.
add The instance of the adapter what instantiating form class in the controller action
$dbAdapter = $this->getServiceLocator()->get('ZendDbAdapterAdapter');
$form = new TestForm ($dbAdapter);
Step 2 in your form
namespace TestForm;

use ZendFormForm;
use ZendDbAdapterAdapterInterface;
use ZendDbAdapterAdapter;
class TestForm extends Form
{
    protected $adapter;
    public function __construct(AdapterInterface $dbAdapter)
    {
        $this->adapter =$dbAdapter;
                parent::__construct("Test Form");
        $this->setAttribute('method', 'post');
                //your select field
$this->add(array(
                'type' => 'ZendFormElementSelect',
                'name' => 'name',
                'tabindex' =>2,
                'options' => array(
                        'label' => 'Author',
                        'empty_option' => 'Please select an author',
                        'value_options' => $this->getOptionsForSelect(),
                )
        ));

                // another fields

}
       public function getOptionsForSelect()
    {
        $dbAdapter = $this->adapter;
        $sql       = 'SELECT id,name  FROM newsauthor where active=1 ORDER BY sortorder ASC';
        $statement = $dbAdapter->query($sql);
        $result    = $statement->execute();

        $selectData = array();

        foreach ($result as $res) {
            $selectData[$res['id']] = $res['name'];
        }
        return $selectData;
    }

}
And here you go you are ready to rock.I hope it helps you

阅读原文...


微信扫一扫,分享到朋友圈

Form zf2: fills the selection field with the data from the database
0

Hello, buddy!

火星晨报0518:主流币普跌;Facebook 在瑞士成立新公司 Libra Networks,或为稳定币项目开发运营实体

上一篇

Pyserial 实现串口 base on python3

下一篇

评论已经被关闭。

插入图片

热门分类

往期推荐

Form zf2: fills the selection field with the data from the database

长按储存图像,分享给朋友