我在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);
在刷新后重新填充表单,但它对我不起作用。
知道我怎么能让它显示数据库中的值(*当这些值存在时)而不是默认值?
答案 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;)中添加代码;