【问题标题】:How to populate zend form using data from different database columns?如何使用来自不同数据库列的数据填充 zend 表单?
【发布时间】:2012-10-16 12:46:46
【问题描述】:

我有一个表格:

$houserent = new Zend_Form_Element_Text('houserent');

$houserent      ->setLabel('House Rent :');
$this   ->addElement($houserent);

$tax = new Zend_Form_Element_Text('tax');
$siteName        ->setLabel('Tax :');
$this    ->addElement($tax);

$internet = new Zend_Form_Element_Text('internet');
$internet->setLabel('Internet :');
$this    ->addElement($internet);

我的数据表“测试”是

id   name         value
1   house rent    100
2   tax            10
3   internet       10

我想使用数据库表中的上述数据填充表单。但我不知道该怎么做。请帮我。谢谢

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案1】:

    您可以覆盖表单中的填充函数。

    public function populate($data)
    {
      foreach($data as $field => $value)
      {
        $this->{$field}->setValue($value);
      }
      return $this;
    }
    

    其中 $data 是名称 => 值的关联数组。

    [编辑]

    所以你现在的形式是:

    <?php
      class Form_Admin_Settings_Add extends Zend_Form
      {
        public function init()
        {
          $houserent = new Zend_Form_Element_Text('houserent');
          $houserent->setLabel('House Rent :');
          $this->addElement($houserent);
    
          $tax = new Zend_Form_Element_Text('tax');
          $siteName->setLabel('Tax :');
          $this->addElement($tax);
    
          $internet = new Zend_Form_Element_Text('internet');
          $internet->setLabel('Internet :');
          $this->addElement($internet);
        }
    
        public function populate($data)
        {
          foreach($data as $field => $value)
          {
            $this->{$field}->setValue($value);
          }
          return $this;
        }
      }
    

    在您的控制器中:

    <?php
      //instantiate form and model
      $form = new Form_Admin_Settings_Add();
      $model = new Model_Test();
    
      //get results
      $results = $model->fetchAll()->toArray();
      $data = array();
    
      //put results into our data array as name => value
      foreach($results as $r)
      {
        $data[$r['name']] = $r['value'];
      }
    
      //populate our form
      $form->populate(data);
      echo $form;
    

    【讨论】:

    • 如果我在表单类中添加您的代码,则会出现以下错误。由于我是zend的新手,您能否详细描述一下。严格标准:Form_Admin_Settings_Add::populate() 的声明应与 /opt/lampp/htdocs/BusinessForum/application/forms/Admin/Settings/Add.php 中的 Zend_Form::populate() 的声明兼容,第 3 行致命错误:在第 49 行的 /opt/lampp/htdocs/BusinessForum/application/forms/Admin/Settings/Add.php 中的非对象上调用成员函数 setValue()
    • 第一个错误提示函数声明与 Zend_Form 中的不同。查看 Zend Framework 1.11,功能看起来相同 (public function populate($data))。您使用的是哪个版本的 Zend Framework?第二个错误信息是表单中不存在表单元素,我可能已经在更新的答案中解决了?
    • Parnaby -King ,请告诉我是否可以在控制器中编写填充函数而不是表单类。谢谢
    • 查看我提供的答案,您不需要在表单中编写填充函数,因为这一切都在控制器中完成。
    【解决方案2】:

    试试这样的:

    class Form extends Zend_Form {
    
       public funcition Form(){
          $houserent = new Zend_Form_Element_Text('houserent');
          $houserent->setLabel('House Rent :')
                    ->setValue($this->_Data['houserent']);
          $this->addElement($houserent);
       }
    
       public function setData($Data){
            $this->_Data = $Data;
            return $this;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多