0

I have a problem with my custom module.. in the form i get that error : Fatal error: Call to a member function setData() on boolean in /wwwroot/whitelabel/01/app/code/core/Mage/Adminhtml/Block/Widget/Form/Container.php on line 141

My config.xml

<?xml version="1.0" encoding="utf-8" ?>
<config>
    <modules>
        <Integravet_Associar>
            <version>0.1.0</version>
        </Integravet_Associar>
    </modules>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <associar before="Mage_Adminhtml">Integravet_Associar_Adminhtml</associar>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
    <adminhtml>
        <layout>
            <updates>
                <associar>
                    <file>integravet_associar.xml</file>
                </associar>
            </updates>
        </layout>
    </adminhtml>
    <global>
        <helpers>
            <integravet_associar>
                <class>Integravet_Associar_Helper</class>
            </integravet_associar>
        </helpers>
        <blocks>
            <integravet_associar>
                <class>Integravet_Associar_Block</class>
            </integravet_associar>
        </blocks>
        <models>
            <integravet_associar>
                <class>Integravet_Associar_Model</class>
                <resourceModel>integravet_associar_resource</resourceModel>
            </integravet_associar>
            <integravet_associar_resource>
                <class>Integravet_Associar_Model_Resource</class>
                <entities>
                    <associar>
                        <table>integravet_associar</table>
                    </associar>
                </entities>
            </integravet_associar_resource>
        </models>
        <resources>
            <integravet_associar_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </integravet_associar_write>
            <integravet_associar_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </integravet_associar_read>
            <integravet_associar_setup>
                <setup>
                    <module>Integravet_Associar</module>
                    <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </integravet_associar_setup>
        </resources>
    </global>
</config>

My adminhtml.xml

<config>
<menu>
    <integravet translate="title" module="integravet_ramo">
        <title>Integravet</title>
        <sort_order>100</sort_order>
        <children>
            <associar translate="title" module="integravet_associar">
                <title>Associar Ramo de Atividade</title>
                <sort_order>1</sort_order>
                <action>adminhtml/associar/index</action>
            </associar>
        </children>
    </integravet>
</menu>
<acl>
    <resources>
        <admin>
            <children>
                <integravet translate="title">
                    <title>Integravet</title>
                    <sort_order>100</sort_order>
                    <children>
                        <associar translate="title" module="integravet_associar">
                            <title>Associar Ramo de Atividade</title>
                            <sort_order>0</sort_order>
                        </associar>
                    </children>
                </integravet>
            </children>
        </admin>
    </resources>
</acl>
</config>

My controller

<?php
/**
 * Created by PhpStorm.
 * User: williansugiyama
 * Date: 22/08/17
 * Time: 15:49
 */
class Integravet_Associar_Adminhtml_AssociarController extends Mage_Adminhtml_Controller_Action {

protected function _initAction() {
    $this->loadLayout()->_setActiveMenu('integravet_associar/set_time')->_addBreadcrumb('Ramos de atividade', 'Ramos de atividade');
    return $this;
}

public function indexAction(){
    $this->_initAction();
    $this->renderLayout();
}

public function editAction(){
    $ramoId = $this->getRequest()->getParam('id');
    $ramoModel = Mage::getModel('integravet_associar/associar')->load($ramoId);
    if($ramoModel->getId() || $ramoId == 0) {
        Mage::register('associar_data', $ramoModel);
        $this->loadLayout();
        $this->_setActiveMenu('integravet_associar/set_time');
        $this->_addBreadcrumb('Ramos de atividade', 'Ramos de atividade');
        $this->_addBreadcrumb('Descrição do ramo', 'Descrição do ramo');
        $this->getLayout()->getBlock('head')
            ->setCanLoadExtJs(true);
        $this->_addContent($this->getLayout()
            ->createBlock('integravet_associar/adminhtml_associar_edit'))
            ->_addLeft($this->getLayout()
                ->createBlock('integravet_associar/adminhtml_associar_edit_tabs')
            );
        $this->renderLayout();
    } else {
        Mage::getSingleton('adminhtml/session')->addError('Ramo não existe.');
        $this->_redirect('*/*/');
    }
}

public function newAction() {
    $this->_forward('edit');
}

public function saveAction(){
    if($this->getRequest()->getParam('id') <= 0) {
        if($this->getRequest()->isPost()) {
            try {
                $postData = $this->getRequest()->getPost();
                if($this->getRequest()->getParam('id') <= 0) {
                    $ramoModel = Mage::getModel('integravet_associar/associar')->load($this->getRequest()->getParam('id'));
                } else {
                    $ramoModel = Mage::getModel('integravet_associar/associar');
                }

                $ramoModel->setCreatedTime( Mage::getSingleton('core/date')->gmtDate() );
                $ramoModel->addData($postData)
                    ->setId()
                    ->setcreated_at(Mage::getSingleton('core/date')->gmtDate())
                    ->save();
                $this->_redirect('*/*/');
                return;

            }  catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                Mage::getSingleton('adminhtml/session')->setramoData($this->getRequest()->getPost());
                $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
                return;
            }
        }
    } else {
        try {
            $postData = $this->getRequest()->getPost();
            $ramoModel = Mage::getModel('integravet_associar/associar')->load($this->getRequest()->getParam('id'));
            $ramoModel->addData($postData)->setupdated_at(Mage::getSingleton('core/date')->gmtDate())
                ->setId($this->getRequest()->getparam('id'))
                ->save();
            $this->_redirect('*/*/');
        } catch ( Exception $e ) {
            echo $e->getMessage();
            $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
            return;
        }
    }


}

public function deleteAction() {
    if($this->getRequest()->getParam('id') > 0) {
        try {
            $ramoModel = Mage::getModel('integravet_associar/associar');
            $ramoModel->setId($this->getRequest()->getParam('id')->delte());
            Mage::getSingleton('adminhtml/session')->addSuccess('Ramo Deletado com sucesso');
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
        }
    }
    $this->_redirect('*/*/');
}
}

My Grid.php

<?php
/**
 * Created by PhpStorm.
 * User: williansugiyama
 * Date: 22/08/17
 * Time: 14:29
 */

class Integravet_Associar_Block_Adminhtml_Grid extends Mage_Adminhtml_Block_Widget_Grid_Container {
    public function __construct()
    {
        $this->_controller = 'adminhtml_associar';
        $this->_blockGroup = 'integravet_associar';

        $this->_headerText = 'Associar ramos de atividade';
        $this->_addButtonLabel = 'Associar';

        parent::__construct();
    }
}

My Edit.php

class Integravet_Associar_Block_Adminhtml_Associar_Edit extends Mage_Adminhtml_Block_Widget_Form_Container {

    public function __construct()
    {
        parent::__construct();
        $this->_objectId = 'id';
        $this->_blockGroup = 'adminhtml_associar';
        $this->_controller = 'integravet_associar';
        $this->_updateButton('save', 'label', 'Salvar associação');
        $this->_updateButton('delete', 'label', 'Deletar associação');
    }


    public function getHeaderText()
    {
        if (Mage::registry('associar_data') && Mage::registry('associar_data')->getId()) {
            return 'Editar Associação ' . $this->htmlEscape(Mage::registry('associar_data')->getTitle());
        } else {
            return 'Adicionar Associação';
        }
    }

}

My tabs.php

<?php
/**
 * Created by PhpStorm.
 * User: williansugiyama
 * Date: 22/08/17
 * Time: 14:51
 */

class Integravet_Associar_Block_Adminhtml_Associar_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {
    public function __construct()
    {
        parent::__construct();
        $this->setId('associar_tabs');
        $this->setDestElementId('edit_form');
        $this->setTitle('Informações do ramo');
    }

    protected function _beforeToHtml()
    {
        $this->addTab('form_section', array(
            'label' => 'About the movie',
            'title' => 'About the movie',
            'content' => $this->getLayout()
                ->createBlock('integravet_associar/adminhtml_associar_edit_tab_form')
                ->toHtml()
        ));

        return parent::_beforeToHtml();
    }
}

My Form.php

<?php
/**
 * Created by PhpStorm.
 * User: williansugiyama
 * Date: 22/08/17
 * Time: 14:56
 */

class Integravet_Associar_Block_Adminhtml_Associar_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {
    protected function _prepareForm()
    {
        $form = new Varien_Data_Form(
            array(
                'id' => 'edit_form',
                'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))
                ),
                'method' => 'post',
            )
        );
        $form->setUseContainer(true);
        $this->setForm($form);
        return parent::_prepareForm();
    }
}

My Tab/Form.php

<?php
/**
 * Created by PhpStorm.
 * User: williansugiyama
 * Date: 22/08/17
 * Time: 14:58
 */

class   Integravet_Associar_Block_Adminhtml_Associar_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form {

    protected function _prepareForm() {
        $form = new Varien_Data_Form();

        $this->setForm($form);

        $fieldset = $form->addFieldset('edit_form', array (
            'legend' => 'Informações do ramo'
        ));

        $fieldset
            ->addField('name', 'text', array(
                'label' => 'Ramo de Atividade',
                'class' => 'required-entry',
                'required' => true,
                'name' => 'name',
            ))
            ->addField('id_erp', 'text', array (
                'label' => 'ID ERP',
                'class' => 'required-entry',
                'required' => true,
                'id_erp' => 'id_erp'
            ))
            ->addField('website_id','multiselect', array (
                'label' => 'teste',
                'class' => 'required-entry',
                'required' => true,
                'values' => Mage::getSingleton('core/resource_website_collection')->toOptionArray(),
            ));


        if(Mage::registry('associar_data')) {
            $form->setValues(Mage::registry('associar_data')->getData());
        }

        return parent::_prepareForm();
    }

}
  • ->setcreated_at(Mage::getSingleton('core/date')->gmtDate()) - this line in save action seems wrong. It should be setCreatedAt – Abhishek Panchal Aug 23 '17 at 20:07
  • Same problem ;/ – Willian Sugiyama Aug 23 '17 at 20:09
  • 8 8.5412 45715192 Mage_Core_Controller_Varien_Action->renderLayout( ??? ) .../AssociarController.php:36 i found this line on error log – Willian Sugiyama Aug 23 '17 at 20:10
2

The issue is the blockGroup, controller are wrong in Edit.php, please update it to:

Edit.php

class Integravet_Associar_Block_Adminhtml_Associar_Edit extends Mage_Adminhtml_Block_Widget_Form_Container {

public function __construct()
{
    parent::__construct();
    $this->_objectId = 'id';
    $this->_blockGroup = 'integravet_associar';
    $this->_controller = 'adminhtml_associar';
    $this->_updateButton('save', 'label', 'Salvar associação');
    $this->_updateButton('delete', 'label', 'Deletar associação');
}


public function getHeaderText()
{
    if (Mage::registry('associar_data') && Mage::registry('associar_data')->getId()) {
        return 'Editar Associação ' . $this->htmlEscape(Mage::registry('associar_data')->getTitle());
    } else {
        return 'Adicionar Associação';
    }
}

}
  • I tried this, but my form page are blank now.. My class form named : 'Integravet_Associar_Block_Adminhtml_Associar_Edit_Tab_Form' – Willian Sugiyama Aug 23 '17 at 20:31
  • Have you the same error ? – PЯINCƏ Aug 23 '17 at 20:33
  • Not the same error, but don't render the form. – Willian Sugiyama Aug 23 '17 at 20:37
  • 'Integravet_Associar_Block_Adminhtml_Associar_Edit_Tab_Form' ? i told the Edit.php not Form.php – PЯINCƏ Aug 23 '17 at 20:40
  • Yeah, I change in Edit.php, but now i have a blank page rather than my form. – Willian Sugiyama Aug 23 '17 at 20:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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