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();
    }

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

1 Answer 1

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';
    }
}

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

Your Answer

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

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