0

Fatal error: Call to a member function setData() on a non-object in /opt/lampp/htdocs/magento192/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php on line 141.

I am trying to create custome edit for custome grid but strucking with above problem from 3 days.So please can any one give me solution for this and also give full code for edit grid if possible

controller :

<?php
class Caritor_Callmeback_Adminhtml_RequestController extends Mage_Adminhtml_Controller_Action {
    public function indexAction() {
        $this->loadLayout ();
        $this->_addContent ( $this->getLayout ()->createBlock ( 'callmeback/callmebackgrid_callmebackgrid', 'callmeback' ) );
        $this->renderLayout ();
    }
    public function newAction() {
        $this->_forward ( 'edit' );
    }

    public function editAction()
    {
        $id = $this->getRequest()->getParam('id', null);
        $model = Mage::getModel('callmeback/blogpost');
        if ($id) {
            $model->load((int) $id);
            if ($model->getId()) {
                $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
                if ($data) {
                    $model->setData($data)->setId($id);
                }
            } else {
                Mage::getSingleton('adminhtml/session')->addError(Mage::helper('callmeback')->__('Example does not exist'));
                $this->_redirect('*/*/');
            }
        }
        Mage::register('callmeback_data', $model);

        $this->loadLayout();
        $this->_addContent ( $this->getLayout ()->createBlock ( 'callmeback/callmebackgrid_edit', 'callmeback' ) );
        $this->renderLayout();
    }

    public function saveAction()
    {
        if ($data = $this->getRequest()->getPost())
        {
            $model = Mage::getModel('callmeback/blogpost');
            $id = $this->getRequest()->getParam('id');
            if ($id) {
                $model->load($id);
            }
            $model->setData($data);

            Mage::getSingleton('adminhtml/session')->setFormData($data);
            try {
                if ($id) {
                    $model->setId($id);
                }
                $model->save();

                if (!$model->getId()) {
                    Mage::throwException(Mage::helper('callmeback')->__('Error saving example'));
                }

                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('callmeback')->__('Example was successfully saved.'));
                Mage::getSingleton('adminhtml/session')->setFormData(false);

                // The following line decides if it is a "save" or "save and continue"
                if ($this->getRequest()->getParam('back')) {
                    $this->_redirect('*/*/edit', array('id' => $model->getId()));
                } else {
                    $this->_redirect('*/*/');
                }

            } catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                if ($model && $model->getId()) {
                    $this->_redirect('*/*/edit', array('id' => $model->getId()));
                } else {
                    $this->_redirect('*/*/');
                }
            }

            return;
        }
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('callmeback')->__('No data found to save'));
        $this->_redirect('*/*/');
    }


    public function massDeleteAction() {
        $Ids = $this->getRequest ()->getParam ( 'callmeback' ); // $this->getMassactionBlock()->setFormFieldName('tax_id'); from Mage_Adminhtml_Block_Tax_Rate_Grid
        if (! is_array ( $Ids )) {
            Mage::getSingleton ( 'adminhtml/session' )->addError ( Mage::helper ( 'callmeback' )->__ ( 'Please select requests.' ) );
        } else {
            try {
                $rateModel = Mage::getModel ( 'callmeback/blogpost' );
                foreach ( $Ids as $Id ) {
                    $rateModel->load ( $Id )->delete ();
                }
                Mage::getSingleton ( 'adminhtml/session' )->addSuccess ( Mage::helper ( 'callmeback' )->__ ( 'Total of %d record(s) were deleted.', count ( $Ids ) ) );
            } catch ( Exception $e ) {
                Mage::getSingleton ( 'adminhtml/session' )->addError ( $e->getMessage () );
            }
        }

        $this->_redirect ( '*/*/index' );
    }
}

?>

Edit :

    $this->_objectId = 'blogpost_id';
    $this->_blockGroup = 'callmeback';
    $this->_controller = 'adminhtml_callmebackgrid';
    $this->_mode = 'edit';

    $this->_addButton('save_and_continue', array(
            'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
            'onclick' => 'saveAndContinueEdit()',
            'class' => 'save',
    ), -100);
    $this->_updateButton('save', 'label', Mage::helper('callmeback')->__('Save Example'));

    $this->_formScripts[] = "
        function toggleEditor() {
            if (tinyMCE.getInstanceById('form_content') == null) {
                tinyMCE.execCommand('mceAddControl', false, 'edit_form');
            } else {
                tinyMCE.execCommand('mceRemoveControl', false, 'edit_form');
            }
        }

        function saveAndContinueEdit(){
            editForm.submit($('edit_form').action+'back/edit/');
        }
    ";
    $form_block = $this->_blockGroup . '/' .
            $this->_controller . '_' .
            $this->_mode .
            '_form';
    echo $form_block;
}

public function getHeaderText()
{
    if (Mage::registry('callmeback_data') && Mage::registry('callmeback_data')->getId())
    {
        return Mage::helper('callmeback')->__('Edit Example "%s"', $this->htmlEscape(Mage::registry('callmeback_data')->getName()));
    } else {
        return Mage::helper('callmeback')->__('New Example');
    }
}
}

Form :

<?php
class Caritor_Callmeback_Block_Adminhtml_Callmebackgrid_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {
    protected function _prepareForm()
    {
        if (Mage::getSingleton('adminhtml/session')->getExampleData())
        {
            $data = Mage::getSingleton('adminhtml/session')->getExamplelData();
            Mage::getSingleton('adminhtml/session')->getExampleData(null);
        }
        elseif (Mage::registry('callmeback_data'))
        {
            $data = Mage::registry('callmeback_data')->getData();
        }
        else
        {
            $data = array();
        }
        Mage::log("this is the form class");
        $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);

        $fieldset = $form->addFieldset('callmeback_form', array(
                'legend' =>Mage::helper('bookshelf')->__('Example Information')
        ));

        $fieldset->addField('name', 'text', array(
                'label'     => Mage::helper('callmeback')->__('Name'),
                'class'     => 'required-entry',
                'required'  => true,
                'name'      => 'name',
                'note'     => Mage::helper('callmeback')->__('The name of the example.'),
        ));

        $fieldset->addField('email', 'text', array(
                'label'     => Mage::helper('callmeback')->__('Email'),
                'class'     => 'required-entry',
                'required'  => true,
                'name'      => 'email',
        ));

        $fieldset->addField('mobile', 'text', array(
                'label'     => Mage::helper('callmeback')->__('Mobile'),
                'class'     => 'required-entry',
                'required'  => true,
                'name'      => 'mobile',
        ));

        $form->setValues($data);

        return parent::_prepareForm();
    }
}
4
  • show ur code of edit.php Oct 20, 2015 at 11:43
  • I am new to magento Oct 20, 2015 at 11:46
  • 2
    The error actually says that the controller cannot find the model 'callmeback/blogpost'. Does your grid work? Oct 21, 2015 at 22:26
  • 1
    Also in your edit file you are calling this controller 'adminhtml_callmebackgrid' but the controller you posted is 'adminhtml_request' Oct 21, 2015 at 22:29

2 Answers 2

3

I had the same error in edit.php file

inside _construct() function

check your block name

$this->_blockGroup = 'your block group here';

hope this will work

Note:

$this->_blockGroup 

should hold block alias name that you set through config.xml.

1
  • Could there be anything else? I have the same exact problem but I already have _blockGroup defined Apr 24, 2017 at 21:10
1

Kindly check you have the file Form.php in folder location Frontname_Modulename_Block_Adminhtml_YourFolderName_Edit

Also check in function having setform()

protected function_prepareForm() { 
$this->setForm($form); 
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.