Zend framework2 来自数据库的zend framework 2.0填充选项

Zend framework2 来自数据库的zend framework 2.0填充选项,zend-framework2,Zend Framework2,我的应用程序基于Zendskletonapplication,现在我想在我的模型之间创建关系,以便: user portal id id firstName name lastName url ........ portal_Id 我想用数据库值填充用户表单中的select选项 <?php namespace Register\Form; use Zend\Captcha\AdapterInterface as

我的应用程序基于Zendskletonapplication,现在我想在我的模型之间创建关系,以便:

user            portal
id              id
firstName       name
lastName        url
........
portal_Id
我想用数据库值填充用户表单中的select选项

<?php
namespace Register\Form;

use Zend\Captcha\AdapterInterface as CaptchaAdapter;
use Zend\Form\Form;
use Zend\Form\Element;


class UserForm extends Form
{
    protected $portalTable;

    public function __construct($name = null)
    {
        parent::__construct('user');
        $this->setAttribute('method', 'post');
        $this->setAttribute('class', 'form-horizontal');

        $this->add(array(
                'name' => 'id',
                'attributes' => array(
                        'type'  => 'hidden',
                ),
        ));

        $this->add(array(
                'type' => 'Select',
                'name' => 'portal_id',
                'options' => array(
                        'label' => 'Portal',
                        'empty_option' => 'Seleccione un portal',
                        'value_options' => array(
                                '1' => 'portal 1',
                                '2' => 'portal 2',
                                '3' => 'portal 3',
                                //i want option from database with 
                        ),

                )
        ));

        $this->add(array(
                'name' => 'firstName',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'First Name',
                ),
        ));

        $this->add(array(
                'name' => 'lastName',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Last Name',
                ),
        ));
        $this->add(array(
                'name' => 'login',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Login',
                ),
        ));

        $this->add(array(
                'name' => 'password',
                'attributes' => array(
                        'type'  => 'password',
                ),
                'options' => array(
                        'label' => 'Password',
                ),
        ));

        $this->add(array(
                'name' => 'password_repeat',
                'attributes' => array(
                        'type'  => 'password',
                ),
                'options' => array(
                        'label' => 'password (repeat)',
                ),
        ));

        $this->add(array(
                'name' => 'email',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Email',
                ),
        ));

        $this->add(array(
                'type' => 'Zend\Form\Element\Csrf',
                'name' => 'csrf',
                'options' => array(
                        'csrf_options' => array(
                                'timeout' => 600
                        )
                )
        ));

        $this->add( array(
                'type' => 'Captcha',
                'name' => 'captcha',
                'options' => array(
                        'label' => 'Please verify you are human.',
                        'captcha' => array('class' => 'Dumb',
                        ),
                ),
        ));

        $this->add(array(
                'name' => 'submit',
                'attributes' => array(
                        'type'  => 'submit',
                        'value' => 'Go',
                        'id' => 'submitbutton',
                ),
        ));
    }
}

对不起,我的英语不好

我写了一篇关于这个话题的深入博客“”。但基本上,这是你必须做的:

基本上,您所要做的就是在表单中查询数据库中的数据。为此,您需要DB适配器在表单中可用,这是通过依赖项注入完成的。由于DB适配器是表单正常运行所必需的,因此我建议使用Setter注入

getServiceConfig()中执行以下操作:

return array('factories' => array(
    'namespace-form-formname' => function($sm) {
        $dbA  = $sm->get('Zend\Db\Adapter\Adapter');
        $form = new \Namespace\Form\Formname($dbA);

        return $form;
    }
));
这将把
Zend\Db\Adapter\Adapter
注入到表单中,该表单应该已经通过其他配置有效。然后,您需要稍微修改一下表单代码:

public function __construct(\Zend\Db\Adapter\Adapter $dbA) {
    parent::__construct('form-name');

    // Do the DB-Query here. You got the DB-Adapter
    // http://zf2.readthedocs.org/en/latest/modules/zend.db.adapter.html
    $selectArray =  array(
        'key' => 'value',
        'key' => 'value',
        'key' => 'value',
    ); // obviously, this is just a fake-$selectArray demonstrating 
       // what the output of your Queries should be

    // Add your Form Elements here
    // use $selectArray as value_options of your desired select element
}
基本上就是这样。遗憾的是,我不能给你一个具体的例子,因为我从来没有使用过
Zend\Db
,但我想这会让你开始

PS:在控制器中,按如下方式调用窗体:

$form = $this->getServiceLocator()->get('namespace-form-formname');
试试看:
//在控制器上添加代码
$arrPortalId=array();
$results=array('1'=>'portal 1','2'=>'portal 2','3'=>'portal 3',);//此部分将更改您的数据库值
foreach($结果为$key=>$val){
$arrPortalId[$key]=$va;
}
$dataParams['portalId']=$arrPortalId;
$form=newuserform($dataParams);

你不明白哪一部分?我如何在我的表格中包含另一个班级表格的选项。在本例中,我需要将选择填充的门户包含到表单用户中,但我不知道如何包含:/i我只是指出了如何将DB适配器包含到表单中。除了DB适配器,您还可以输入tablegateway或您喜欢的任何访问数据库的方式。我认为使用该网关更容易,因为查询执行的是类表。。我该怎么做?@andres请参考我最新的博客帖子,这篇文章更深入地涵盖了整个主题
$form = $this->getServiceLocator()->get('namespace-form-formname');
Try:
// add code on controller
$arrPortalId = array();
$results = array('1' => 'portal 1', '2' => 'portal 2', '3' => 'portal 3',); // this part change your database value
foreach ($results as $key => $val) {
$arrPortalId[$key] = $va;
}
$dataParams['portalId'] = $arrPortalId;
$form = new UserForm($dataParams);

 <?php
namespace Register\Form;

use Zend\Captcha\AdapterInterface as CaptchaAdapter;
use Zend\Form\Form;
use Zend\Form\Element;


class UserForm extends Form
{
    protected $portalTable;

    public function __construct($params = array())
    {   $name = isset($params['name'])?$params['name']:'';
        parent::__construct('user');
        $this->setAttribute('method', 'post');
        $this->setAttribute('class', 'form-horizontal');

        $this->add(array(
                'name' => 'id',
                'attributes' => array(
                        'type'  => 'hidden',
                ),
        ));
    $portalId = (isset($params['portalId']) && count($params['portalId']) > 0)?$params['portalId']:array();
        $this->add(array(
                'type' => 'Select',
                'name' => 'portal_id',
                'options' => array(
                        'label' => 'Portal',
                        'empty_option' => 'Seleccione un portal',
                        'value_options' => $portalId,

                )
        ));

        $this->add(array(
                'name' => 'firstName',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'First Name',
                ),
        ));

        $this->add(array(
                'name' => 'lastName',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Last Name',
                ),
        ));
        $this->add(array(
                'name' => 'login',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Login',
                ),
        ));

        $this->add(array(
                'name' => 'password',
                'attributes' => array(
                        'type'  => 'password',
                ),
                'options' => array(
                        'label' => 'Password',
                ),
        ));

        $this->add(array(
                'name' => 'password_repeat',
                'attributes' => array(
                        'type'  => 'password',
                ),
                'options' => array(
                        'label' => 'password (repeat)',
                ),
        ));

        $this->add(array(
                'name' => 'email',
                'attributes' => array(
                        'type'  => 'text',
                ),
                'options' => array(
                        'label' => 'Email',
                ),
        ));

        $this->add(array(
                'type' => 'Zend\Form\Element\Csrf',
                'name' => 'csrf',
                'options' => array(
                        'csrf_options' => array(
                                'timeout' => 600
                        )
                )
        ));

        $this->add( array(
                'type' => 'Captcha',
                'name' => 'captcha',
                'options' => array(
                        'label' => 'Please verify you are human.',
                        'captcha' => array('class' => 'Dumb',
                        ),
                ),
        ));

        $this->add(array(
                'name' => 'submit',
                'attributes' => array(
                        'type'  => 'submit',
                        'value' => 'Go',
                        'id' => 'submitbutton',
                ),
        ));
    }
}