SocialEngine / Zend中表单的问题

时间:2014-02-25 11:58:17

标签: php database zend-framework socialengine

我在SocialEngine(*是基于Zend framework v1.9构建)中创建了一个模块,其中包含一个带有几个选项的管理表单。

我遇到的问题是,刷新页面后似乎没有从数据库中获取字段的值,它显示了默认值。

我保存后立即显示正确的值(*但我不确定保存后页面是否刷新),但在刷新后不会刷新。

controller /application/modules/Mymodule/controllers/AdminSomesettingsController.php

class Mymodule_AdminSomesettingsController extends Core_Controller_Action_Admin
{
  public function indexAction()
  {
    $this->view->form = $form = new Mymodule_Form_Admin_Someform();

    $settings = Engine_Api::_()->getApi('settings', 'core');

    if(!$form->isValid($settings->mymodule))
    { return $form->populate($settings->mymodule); }

    if( !$this->getRequest()->isPost() ) { return; }
    if( !$form->isValid($this->getRequest()->getPost()) ) { return; }

    $db = Engine_Api::_()->getDbTable('settings','core')->getAdapter();
    $db->beginTransaction();
    try {
      $values = $form->getValues();
      $settings->mymodule = $values;

      $db->commit();
    } catch( Exception $e ) {
      $db->rollback();
      throw $e;
    }

    $form->saveValues();

    $form->addNotice('Your changes have been saved.');
  }
}

表格 /application/modules/Mymodule/Form/Admin/Someform.php

class Mymodule_Form_Admin_Someform extends Engine_Form
{
  public function init()
  {
    $this
      ->setTitle('My Settings')
      ->setDescription('Settings');

    $this->addElement('Radio', 'some_setting', array(
      'label' => 'Some Setting',
      'description' => '',
      'multiOptions' => array(
        0 => 'Option One',
        1 => 'Option Two',
        2 => 'Option Three',
      ),
      'value' => 1,
      'escape' => false,
    ));

    // Add submit button
    $this->addElement('Button', 'submit', array(
      'label' => 'Save Changes',
      'type' => 'submit',
      'ignore' => true
    ));
  }
  public function saveValues()
  {
  }
}

我已经检查过其他插件,在我看来$form->populate($settings->mymodule);在刷新后重新填充表单,但它对我不起作用。 知道我怎么能让它显示数据库中的值(*当这些值存在时)而不是默认值?

2 个答案:

答案 0 :(得分:1)

我自己是socialengine和zend的新手。我对socialengine的理解说,在ur表单类中创建一个函数saveValues(),然后从控制器操作中调用它作为 $ form-> saveValues(),根据需要传递参数。这是socialengine似乎遵循的惯例,并且在表单类的saveValues()内部,你可以根据需要保存valus。只有在验证失败时才填充表格shud

(!$form->isValid($formData )) { return $form->populate($formData); }

而不是默认适配器,U应该尝试这个 -

$db =Engine_Api::_()->getDbTable('settings','core')->getAdapter(),
$db->beginTransaction();

如果你想设置特定字段的值,请尝试 - $ form-&gt; populate(array('formField'=&gt;'urValue')); 在你的情况下可能 - < / p>

$val=$settings->mymodule,
$form->populate('formField'=>$val); 

答案 1 :(得分:0)

您可以在控制器$ form-&gt; some_setting-&gt; setValue(&#39; 1&#39;)中添加代码;