无法保存从zend框架2中的数据库下拉值中检索

时间:2013-05-26 21:18:31

标签: forms zend-framework2

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

我已经阅读了很多关于在zend框架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
  3. 这就是我做的

    1. 我创建了一个表单,并添加了一个" 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 ;,             )         ));     } }

    2. 我创建了一个名为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,
                  ),
          ));
      }
      

      }

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

      public function getFormElementConfig() {     返回数组(         '工厂' =>阵列(             ' CategoryFieldSet' =>功能($ 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& #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();

    5. 现在一切都很好,选择元素显示数据库中的值,但我的问题是当我尝试将数据添加到数据库时,字段下拉的类别将保存为值&#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;或者能够将该记录保存到数据库中?

0 个答案:

没有答案