Проблемы с формой в SocialEngine/Zend

Я создал модуль в SocialEngine (*который построен на Zend framework 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); повторно заполняет форму после обновления, но у меня это не работает. Есть идеи, как заставить его отображать значения из базы данных (*когда эти значения существуют) вместо значений по умолчанию?


person George    schedule 25.02.2014    source источник


Ответы (2)


Я сам новичок в socialengine и zend. Мое понимание socialengine говорит: создайте функцию saveValues() внутри класса формы ur, затем вызовите ее из действия контроллера как $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); 
person Tanvir    schedule 03.03.2014
comment
Спасибо, я попробую это сегодня. - person George; 03.03.2014
comment
Не могли бы вы предоставить полный пример одной из ваших форм администратора и ее контроллера? Большое спасибо. - person George; 03.03.2014
comment
как я уже сказал, я сам новенький... лол, еще не создал форму администратора. Но процесс любой формы одинаков. Я уверен, что $db =Engine_Api::_()->getDbTable('settings','core')->getAdapter(), сработает в вашем случае... давайте проверим, братан. У Socialengine почти нет учебника или около того. Я научился методом проб и ошибок. Сначала попробуйте, посмотрите, как пойдет. - person Tanvir; 03.03.2014
comment
Я пытался, прежде чем просить вас привести пример, но это не сработало. Спасибо, в любом случае. - person George; 03.03.2014
comment
Вы попробовали все, что я сказал, вы можете опубликовать весь код формы вместе с частью действия контроллера. - person Tanvir; 03.03.2014
comment
Я отредактировал свой вопрос в соответствии с вашими инструкциями, или, по крайней мере, это то, что я понял. - person George; 03.03.2014
comment
Как я уже сказал, я также новичок в socialengine, можете ли вы объяснить, что возвращает $settings-›mymodule? Я пробовал такие вещи, как $settings->getSetting('core.license.email'), которые возвращают значение из engine4_core_settings. - person Tanvir; 03.03.2014
comment
Вопрос UR также неясен для меня. Что вы имели в виду под -после того, как я обновляю страницу, и она показывает мне значения по умолчанию. Ваша страница обновляется, когда вы нажимаете «Отправить», это то, что вы имели в виду? Меня также смущает это утверждение: оно показывает правильные значения сразу после сохранения (* но я не уверен, обновляется ли страница после сохранения), но не после обновления. - person Tanvir; 03.03.2014
comment
Я имел в виду, что когда я нажимаю кнопку «Отправить», изменения сохраняются в базе данных (* я вижу в БД, что они были сохранены). Но после того, как я обновлю страницу, она показывает мне значения по умолчанию, которые я установил в форме (* вы можете видеть в моем примере формы, что для элемента установлено значение по умолчанию). - person George; 04.03.2014
comment
Что касается $settings-›mymodule. Я видел, что плагины по умолчанию используют это. - person George; 04.03.2014

Вы можете добавить код в контроллер $form->some_setting->setValue('1');

person Gaurav Sharma    schedule 08.11.2017