首先,请原谅我的英语不好。
我已经阅读了很多关于在zend框架2中使用数据库中的值填充下拉列表的内容,这两个链接对我有很大帮助:
这就是我做的
我创建了一个表单,并添加了一个" categoryFieldset"
类型的字段类ProductForm扩展Form { 公共函数init() { //我们想忽略传递的名字 父:: __构建体('产品&#39); $这 - >的setName('产品&#39); $ this-> setAttribute(' method',' post'); $这 - >添加(阵列( '名称' => ' ID&#39 ;, '类型' => '隐藏&#39 ;, )); $这 - >添加(阵列( '名称' => '名称&#39 ;, '类型' => '文本&#39 ;, '选项' =>阵列( '标签' => '名称&#39 ;, ) )); $这 - >添加(阵列( '名称' => '类别&#39 ;, '类型' => ' CategoryFieldSet&#39 ;, )); $这 - >添加(阵列( '名称' => '提交&#39 ;, '类型' => '提交&#39 ;, '属性' =>阵列( '值' => '添加&#39 ;, ' ID' => '提交按钮&#39 ;, ) )); } }
我创建了一个名为categoryFieldset的类,它从我添加了一个select字段的fieldset扩展而来:
class CategoryFieldset扩展了Fieldset { function _ 构造(CategoryTable $ categoryTable) { 父:: _construct(' category_fieldset&#39);
$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() { 返回数组( '工厂' =>阵列( ' CategoryFieldSet' =>功能($ 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& #39)));
$形式 - >制备();
echo $ this-> form() - > openTag($ form);
echo $ this-> formHidden($ form-> get(' id'));
echo $ this-> formRow($ form-> get(' name'));
echo"
&#34 ;;
$ category_fieldset = $ form-> get(' category');
echo $ this-> formRow($ category_fieldset-> get(' categoryField'));
echo"
&#34 ;;
echo $ this-> formSubmit($ form-> get(' submit'));
echo"
&#34 ;;
echo $ this-> form() - > closeTag();
现在一切都很好,选择元素显示数据库中的值,但我的问题是当我尝试将数据添加到数据库时,字段下拉的类别将保存为值&#34 ; 0"而不是类别的id值。我认为问题是视图呈现选择字段的方式,当我检查HTML代码时,我注意到选择字段的名称是"类别[categoryField]"它应该是"类别"。
这是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>
我在viw中打印了$ request-&gt; getPost()数组,这就是它所显示的内容:
Zend\Stdlib\Parameters Object ( [storage:ArrayObject:private] => Array ( [id] => [name] => Product1 [category] => Array ( [categoryField] => 2 ) [submit] => Add ) )
我需要做些什么才能让字段名称显示为&#34; category&#34;或者能够将该记录保存到数据库中?