【问题标题】:Problems with a form in SocialEngine/ZendSocialEngine/Zend 中的表单问题
【发布时间】:2014-03-27 15:15:04
【问题描述】:

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

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

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

控制器/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); 在刷新后重新填充了表单,但它对我不起作用。 知道如何让它显示数据库中的值(*当这些值存在时)而不是默认值?

【问题讨论】:

    标签: php database zend-framework socialengine


    【解决方案1】:

    可以在控制器 $form->some_setting->setValue('1'); 中添加代码

    【讨论】:

      【解决方案2】:

      我自己是 socialengine 和 zend 的新手。我对 socialengine 的理解是,在你的表单类中创建一个函数 saveValues(),然后从控制器操作中将其调用为 $form->saveValues() , 根据需要传递参数。这是 socialengine 似乎遵循的约定,在表单类的 saveValues() 中,您可以根据需要保存值。只有在验证失败时才填充您的表单

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

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

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

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

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

      【讨论】:

      • 谢谢,我今天试试这个。
      • 您介意提供一个管理表单及其控制器的完整示例吗?非常感谢。
      • 正如我所说,我自己是新人...大声笑,还没有制作任何管理表格。但是任何形式的过程都是一样的。我确定 $db =Engine_Api::_()->getDbTable('settings','core')->getAdapter(),在你的情况下会起作用......让我们检查一下兄弟。Socialengine 几乎没有任何教程左右。我通过试验 n 错误学习。先试试这个看看它是怎么回事
      • 在向您询问示例之前我已经尝试过,但没有成功。还是谢谢。
      • 你试过我告诉你的一切吗......你可以发布整个表单代码,以及控制器操作部分
      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多