首先,请原谅我的英语不好。
我已经阅读了很多关于在 zend 框架 2 中使用数据库中的值填充下拉列表的内容,对我有很大帮助的 2 个链接是:
- http://framework.zend.com/manual/2.2/en/modules/zend.form.collections.html
- http://zf2.readthedocs.org/en/release-2.1.4/modules/zend.form.advanced-use-of-forms.html
这就是我所做的
我创建了一个表单,并添加了一个“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' => '提交按钮',),) ); } }
我创建了一个名为 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, ), )); }
}
将代码添加到我的模块文件中:
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; }, ) ); }
我的观点是这样的:
$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 ) )
我需要做什么才能使字段名称显示为“类别”或能够将该记录保存到数据库中?