1

首先,请原谅我的英语不好。

我已经阅读了很多关于在 zend 框架 2 中使用数据库中的值填充下拉列表的内容,对我有很大帮助的 2 个链接是:

  1. http://framework.zend.com/manual/2.2/en/modules/zend.form.collections.html
  2. http://zf2.readthedocs.org/en/release-2.1.4/modules/zend.form.advanced-use-of-forms.html

这就是我所做的

  1. 我创建了一个表单,并添加了一个“categoryFieldset”类型的字段

    class ProductForm extends Form { public function init() { // 我们要忽略传递的名称 parent::__construct('product'); $this->setName('product'); $this->setAttribute('method', 'post'); $this->add(array('name' => 'id', 'type' => 'Hidden', )); $this->add(array('name' => 'name', 'type' => 'Text', 'options' => array('label' => 'Name', ), )); $this->add(array('name' => 'category', 'type' => 'CategoryFieldSet', )); $这个-> 添加(数组('名称' => '提交','类型' => '提交','属性' => 数组('值' => '添加','id' => '提交按钮',),) ); } }

  2. 我创建了一个名为 categoryFieldset 的类,它从我添加了一个选择字段的字段集扩展而来:

    类 CategoryFieldset 扩展 Fieldset { function _construct( CategoryTable $categoryTable) { parent:: _construct('category_fieldset');

        $this->setHydrator(new ClassMethodsHydrator(false))->setObject(new Category());
    
        $categorySelectOptionsArray = $categoryTable->populateSelectCategory();
        $this->add(array(
                'name' => 'categoryField',
                'type' => 'Select',
                'options' => array(
                        'label' => 'Category',
                        'value_options' => $categorySelectOptionsArray,
                ),
        ));
    }
    

    }

  3. 将代码添加到我的模块文件中:

    public function getFormElementConfig() { return array( 'factories' => array( 'CategoryFieldSet' => function($sm) { $serviceLocator = $sm->getServiceLocator(); $categoryTable = $serviceLocator->get('Administrador\ Model\CategoryTable'); $fieldset = new CategoryFieldset($categoryTable); return $fieldset; }, ) ); }

  4. 我的观点是这样的:

    $form = $this->form; $form->setAttribute('action', $this->url('product', array('action' => 'add'))); $form->prepare(); echo $this->form()->openTag($form); echo $this->formHidden($form->get('id')); echo $this->formRow($form->get('name')); 回声“
    ”;$category_fieldset = $form->get('category'); echo $this->formRow($category_fieldset->get('categoryField')); 回声“
    ”;echo $this->formSubmit($form->get('submit')); 回声“
    ”;回声 $this->form()->closeTag();

现在一切都很好,选择元素显示数据库中的值,但我的问题是当我尝试将数据添加到数据库时,类别下拉列表的字段保存为值“0”而不是类别的 id 值。我认为问题在于视图呈现选择字段的方式,当我检查 HTML 代码时,我注意到选择字段的名称是“category [categoryField]”,它应该是“category”。

这是 HTML 代码:

<span>Category</span>
<select name="category[categoryField]">
<option value="1">Category 1</option>
<option value="2">Category 2</option>
<option value="3">Category 3</option>
<option value="4">Category 4</option>
<option value="5">Category 5</option>
</select>

我在视图中打印了 $request->getPost() 数组,这就是它显示的内容:

Zend\Stdlib\Parameters Object ( [storage:ArrayObject:private] => Array ( [id] => [name] => Product1 [category] => Array ( [categoryField] => 2 ) [submit] => Add ) )

我需要做什么才能使字段名称显示为“类别”或能够将该记录保存到数据库中?

4

0 回答 0