来自数据库的 Zend 框架 2.0 填充选项 [英] zend framework 2.0 fill option from database

查看:37
本文介绍了来自数据库的 Zend 框架 2.0 填充选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i have my application based in ZendSkeletonApplication , now i want create to relationship between my models so:

user            portal
id              id
firstName       name
lastName        url
........
portal_Id

我想用数据库值填充用户表单中的选择选项

I want to fill my select-option in the user form with database values

<?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',
                ),
        ));
    }
}

在这部分我想从数据库中填充选择

in this part i want fill select from database

$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 
                        ),

                )
        ));

对不起我的英语

推荐答案

我写了一篇深入的博客 "Zend\Form\Element\Select 和 Database-Values" 关于这个主题.基本上,这就是你必须做的:

I have written an in-depth blog "Zend\Form\Element\Select and Database-Values" about this topic. Basically though, this is what you have to do:

基本上,您所要做的就是在表单内查询数据库以获取数据.为此,您需要在表单中使用 DB-Adapter,这是通过依赖注入完成的.由于 DB-Adapter required 使您的表单正常运行,我建议使用 Setter-Injection.

Basically all you have to do is Query the Database inside your Form for the Data. For this you need the DB-Adapter to be available inside your Form, which is done by Dependency-Injection. Since the DB-Adapter is required for your Form to function correctly, i'd suggest Setter-Injection.

在您的 getServiceConfig() 中执行以下操作:

Inside your getServiceConfig() do this:

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 注入到您的表单中,该表单应该已经通过其他配置有效.然后你需要稍微修改一下你的表单代码:

This will inject the Zend\Db\Adapter\Adapter into your form, which should already be valid though other configuration. Then you need to modify your form code a little bit:

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,但我认为这会让你开始.

And that's basically it. Sadly i can't give you an concrete example, as i've never worked with Zend\Db, but i assume this will get you started.

PS:在你的控制器中,像这样调用表单:

PS: In your controller, call the form like this:

$form = $this->getServiceLocator()->get('namespace-form-formname');

这篇关于来自数据库的 Zend 框架 2.0 填充选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆