I have created an edit form for an admin module, but have come across an issue with putting data into and pulling data from the database.
For example I have field A,B and C, where I place some data, this is lost before it gets to the database, although a new row and default values for that row are created. If I place data directly into the database my grid which I have created displays it as well as the empty rows that have been created. I don't understand why values are not being passed?
I have this
class Training_Animal_Block_Adminhtml_Animal_Edit_Form
extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',//id for the form
'action' => $this->getUrl('*/*/save',
array('id' => $this->getRequest()->getParam('id'))),//post action
'method' => 'post',//the method
'enctype' => 'multipart/form_data',//allows posting of files
));
$form->setUseContainer(TRUE);
$this->setForm($form);
return parent::_prepareForm();
}
}
and this
class Training_Animal_Block_Adminhtml_Animal_Edit_Tab_General
extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
//instantiates form
$form = new Varien_Data_Form();
$form->setHtmlIdPrefix('general');
$fieldset = $form->addFieldset('general_form', array(
'legend' => $this->__('General Setup')
));
if ( Mage::registry('current_animal')->getId() ){
//creates fieldset for form
$fieldset->addField('entity_id', 'label', array(
'label' => $this->__('Entity id %s',
Mage::registry('current_animal')->getId()
)
));
}
$fieldset->addField('name', 'text', array(
'label' => $this->__('Name'),
'class' => 'required-entry',
'required' => TRUE,
'name' => 'name'//matches with name from entity and $form->addValues($this->getFormData()); will pass in information from entity
));
$fieldset->addField('type', 'text', array(
'label' => $this->__('Animal Type'),
'class' => 'required-entry',
'required' => TRUE,
'name' => 'type'
));
$fieldset->addField('edible', 'select', array(
'label' => $this->__('Is Edible'),
'class' => 'required-entry',
'required' => TRUE,
'name' => 'edible',
'values' => array('No', 'Yes', 'Maybe'),
//or: Mage::getModel('training/entity_attribute_source_maybe')
// ->getOptionArray(),
));
//passes data from entity
$form->addValues($this->getFormData());
$this->setForm($form);
return parent::_prepareForm();
}
}
I believe the above may hold the reason for the failure, but i am not sure. On checking the save action with var_dump() I can see the data is not passed.
The database columns are name, type, edible
===EDIT===
public function saveAction()
{
if ( $data = $this->getRequest()->getPost() ) {
$this->_getSession()->setFormData($data);
$model = Mage::getModel('training/animal');
$id = $this->getRequest()->getParam('id');
try {
if ( $id ) {
$model->load($id);
}
$model->addData($data);
//saves data
$model->save();
$this->_getSession()->addSuccess(
$this->__('Animal was saved'));
$this->_getSession()->setFormData(false);
if ( $this->getRequest()->getParam('back') ) {
$params = array('id' => $model->getId());
$this->_redirect('*/*/edit', $params);
} else {
$this->_redirect('*/*/list');
}
} catch ( Exception $e ) {
$this->_getSession()->addError($e->getMessage());
if ( $model && $model->getId() ) {
$this->_redirect('*/*/edit', array(
'id' => $model->getId()
));
} else {
$this->_redirect('*/*/new');
}
}
return;
}
//if no data has been passed an error will be thrown and user redirected
$this->_getSession()->addError($this__('No data found to save'));
$this->_redirect('*/*');
}
===EDIT===
Hope this can help with a solution
I have looked at the HTML that is being generated in the browser, and it shows
<div class="entry-edit">
<form id="edit_form" action="http://magentodevtest.local/index.php/admin/animal/save/" method="post" enctype="multipart/form_data">
<div>
<input name="form_key" type="hidden" value="LmdBGhXdIcQWBm0e" />
</div>
</form>
</div>
name
type
edible
are all outside the form tags only form_key is within the tags and when I check in the save action only the form_key is being passed.