saveAction stores empty object
-
30-09-2020 - |
Question
Whenever I fill a form and click "Save", magento doesn't get the form data. It just saves an empty object in the database. I can't figure out why. Here's my form and file structure:
Controller:
<?php
class Vkusen_Kartof_Adminhtml_KartofController extends Mage_Adminhtml_Controller_Action
{
....
public function saveAction()
{
$data = $this->getRequest()->getPost();
var_dump($data);
>>>> Dumps : array(1) { ["form_key"]=> string(16) "N1sBdZb21Nb7dYHT" }
/* >>>> Sends me to the save page which is blank, saving an empty row in DB:
if ( $data = $this->getRequest()->getPost() ) {
$this->_getSession()->setFormData($data);
$model = Mage::getModel('vkusen_kartof/kartof');
$id = $this->getRequest()->getParam('id');
try {
if ($id) {
$model->load($id);
}
$model->addData($data);
$model->save();
$this->_getSession()->addSuccess(
$this->__('Kartof was successfully saved')
);
$this->_getSession()->setFormData(false);
if ( $this->getRequest()->getParam('back') ) {
$params = array('id' => $model->getId());
$this->_redirect('*/*/index');
}
} catch (Exception $e) {
$this->_getSession()->addError($e->getMessage());
if ($model && $model->getId()) {
$this->_redirect('*/*/edit', array(
'id' => $model->getId())
);
} else {
$this->_redirect('*/*/new');
}
}
return;
}
$this->_getSession()->addError($this->__('No data found to save'));
$this->_redirect('*/*');
*/ } }
kartof.xml (the layout):
<?xml version="1.0" encoding="UTF-8" ?>
<layout>
<adminhtml_kartof_index>
<reference name="content">
<block type="vkusen_kartof/adminhtml_kartof" name="vkusen.kartof.block" />
</reference>
</adminhtml_kartof_index>
<adminhtml_kartof_edit>
<reference name="content">
<block type="vkusen_kartof/adminhtml_kartof_edit" name="vkusen.kartof.form" />
</reference>
<reference name="left">
<block type="vkusen_kartof/adminhtml_kartof_edit_tabs" name="kartof_info_tabs" />
</reference>
</adminhtml_kartof_edit>
</layout>
Edit.php:
class Vkusen_Kartof_Block_Adminhtml_Kartof_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
protected function _construct()
{
parent::_construct();
// vkusen_kartof/adminhtml_kartof_edit_form
$this->_objectId = 'id';
$this->_blockGroup = 'vkusen_kartof';
$this->_controller = 'adminhtml_kartof';
$this->_mode = 'edit';
}
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->_updateButton('save', 'label',
$this->__('Save Kartof'));
$this->_updateButton('delete', 'label',
$this->__('OBLITERATE Kartof'));
$this->_addButton('save and continue', array(
'label' => $this->__('Save And Continue Edit'),
'onclick' => 'saveAndContinueEdit()',
'class' => 'save',
), -100);
$this->_formScripts[] = "
function saveAndContinueEdit() {
editForm_submit($('edit_form').action+'back/edit'
}
";
return $this;
}
public function getHeaderText()
{
$model = Mage::registry('current_kartof');
if ($model && $model->getId()) {
return $this->__('Edit Kartof (%s)',
$this->__($model->getTitle())
);
} else {
return $this->__('New kartof');
}
}
}
Tabs.php:
class Vkusen_Kartof_Block_Adminhtml_Kartof_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{
public function __construct()
{
parent::__construct();
$this->setId('kartof_info_tabs');
$this->setDestElementId('edit_form');
$this->setTitle($this->__('Kartof Information'));
}
protected function _beforeToHtml()
{
$this->parent = parent::_prepareLayout();
$this->addTab('general', array(
'label' => $this->__('Change details'),
'content' => $this->getLayout()->createBlock('vkusen_kartof/adminhtml_kartof_edit_tab_general')->toHtml(),
'active' => true,
));
$this->parent = parent::_prepareLayout();
$this->addTab('gggg', array(
'label' => $this->__('Change something'),
'active' => false,
));
return parent::_beforeToHtml();
}
}
Form.php
class Vkusen_Kartof_Block_Adminhtml_Kartof_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
if (Mage::registry('current_kartof'))
{
$data = Mage::registry('current_kartof')->getData();
} else {
$data = array();
}
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
'enctype' => 'multipart/form-data'
)
);
$form->setUseContainer(true);
$this->setForm($form);
$form->setValues($data);
return parent::_prepareForm();
}
}
General.php:
class Vkusen_Kartof_Block_Adminhtml_Kartof_Edit_Tab_General extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
if (Mage::registry('current_kartof'))
{
$data = Mage::registry('current_kartof')->getData();
} else {
$data = array();
}
$form = new Varien_Data_Form();
$this->setForm($form);
$fieldset = $form->addFieldset('general_form', array(
'legend' => $this->__('General Setup')
));
$fieldset->addField('title', 'text', array(
'label' => $this->__('Title'),
'class' => 'required entry',
'required' => true,
'name' => 'the_title',
));
$fieldset->addField('description', 'text', array(
'label' => $this->__('Description'),
'class' => 'required entry',
'required' => true,
'name' => 'the_description',
));
// Pass info from the entity:
$form->setValues($data);
return parent::_prepareForm();
}
}
And the config.xml(just in case):
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<modules>
<Vkusen_Kartof>
<version>0.1.0</version>
</Vkusen_Kartof>
</modules>
<global>
<blocks>
<vkusen_kartof>
<class>Vkusen_Kartof_Block</class>
</vkusen_kartof>
</blocks>
<models>
<vkusen_kartof>
<class>Vkusen_Kartof_Model</class>
<resourceModel>vkusen_kartof_resource</resourceModel>
</vkusen_kartof>
<vkusen_kartof_resource>
<class>Vkusen_Kartof_Model_Resource</class>
<entities>
<kartof>
<table>kartof_table</table>
</kartof>
</entities>
</vkusen_kartof_resource>
</models>
<helpers>
<vkusen_kartof>
<class>Vkusen_Kartof_Helper</class>
</vkusen_kartof>
</helpers>
<resources>
<vkusen_kartof_setup>
<setup>
<module>Vkusen_Kartof</module>
</setup>
</vkusen_kartof_setup>
</resources>
</global>
<frontend>
<routers>
<vkusen_kartof>
<use>standard</use>
<args>
<module>Vkusen_Kartof</module>
<frontName>vkusen</frontName>
</args>
</vkusen_kartof>
</routers>
</frontend>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<vkusen_kartof after="Mage_Adminhtml">Vkusen_Kartof_Adminhtml</vkusen_kartof>
</modules>
</args>
</adminhtml>
</routers>
</admin>
<adminhtml>
<layout>
<updates>
<vkusen_kartof>
<file>vkusen/kartof.xml</file>
</vkusen_kartof>
</updates>
</layout>
</adminhtml>
</config>
P.S. Sorry for the long post but I guess it's inevitable.
EDIT: http: //i.imgur.com/6N73OIe.png
there's a "space" after "http:"
Solution
I found out what the problem was. In my form the fields' names weren't the same as the table columns. If I have a column "title", then my field should be:
$fieldset->addField('title', 'text', array(
'label' => $this->__('Title'),
'class' => 'required entry',
'required' => true,
'name' => 'title', // MUST match the table column!!!
));
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange