我正在尝试向我的组件添加一些表单,但我不确定必须应用哪些命名约定才能正常工作。
目前我有一个工作表单 - 它显示存储在XML文件中的字段,并将数据从数据库加载到它。但是,当我尝试提交此表单(编辑或添加新记录)时,它不起作用。按下提交(save()方法)后,它只是重定向我并显示该记录已成功编辑,但事实并非如此。当我尝试编辑现有记录时,按下提交后没有任何反应,当我尝试添加新记录时,它只会添加空/空白记录。
所以我做了一点调试并发现,问题出在JController :: checkEditId()方法中。它总是返回false,这意味着JControllerForm :: save()也返回false,这就是为什么它不能正确保存它。表单的HTML代码是正确的,我可以使用全局数组$ _POST来访问数据。
我怀疑这个问题是因为方法loadFormData,JModelAdmin类的getForm中的命名约定。我不确定如何命名该表格。
所以这是我的代码与此问题相关:
用于显示表单的子控件 - controllers / slideshowform.php
class SlideshowModelSlideshowForm extends JModelAdmin{
public function getForm($data = array(), $loadData = true){
return $this->loadForm('com_slideshow.slideshowform', 'editform', array('load_data' => $loadData, 'control' => 'jform'));
}
protected function loadFormData(){
$data = JFactory::getApplication()->getUserState('com_slideshow.edit.slideshowform.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
public function getTable($table = "biometricslideshow"){
return parent::getTable($table);
}
}
视图/ slideshowform / view.html.php
class SlideshowViewSlideshowForm extends JView{
public function display($tmpl = null){
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
$this->form = $this->get('form');
$this->item = $this->get('item');
JToolBarHelper::save('slideshowform.save');
parent::display();
}
}
视图/ slideshowform / TMPL /如default.php
<?php
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form method="post" action="<?php echo JRoute::_("index.php?option=com_slideshow&id=".(int) $this->item->id)?>" name="adminForm" id="slideshow-form">
<fieldset class="adminform">
<legend>Edit slide</legend>
<table>
<input type="hidden" name="task" value="">
<?php echo JHtml::_('form.token'); ?>
<?php
foreach($this->form->getFieldset() as $field){
?>
<tr><td><?php echo $field->label ?></td><td><?php echo $field->input ?></td></tr>
<?php
}
?>
</table>
</fieldset>
</form>
有人可以看看吗?
答案 0 :(得分:2)
您必须添加控制器SlideshowControllerSlideshowForm
和代码save
方法。在那里,您必须验证表单数据并调用SlideshowModelSlideshowForm->save
事件,然后重定向并显示成功/失败消息。