2016-05-13 10 views
0

Ich bin neu im mangeto Framework und ich lerne ein Formular im Adminbereich zu erstellen. Es hat sich aber über Stunden, dass ich den Fehler nicht herausfinden konnte, erhalte ich:Ich sehe die Schaltfläche "Speichern" nicht auf meinem Formular, obwohl ich es im Adminbereich eingerichtet habe.

Recoverable Error: Argument 1 passed to Mage_Adminhtml_Controller_Action::_addContent() must be an instance of Mage_Core_Block_Abstract, boolean given, called in /vagrant/magento/app/code/local/MasteringMagento/Example/controllers/Adminhtml/EventController.php on line 12.

Das folgende ist mein edit.php sowie meine form.php edit.php Datei:

class MasteringMagento_Example_Adminhtml_EventController extends Mage_Adminhtml_Controller_Action{ 
public function indexAction(){ 
    $this->loadLayout(); 
    $this->_addContent(
     $this->getLayout()->createBlock('example/adminhtml_event_edit')); 
    //go straight to the php file to render the form. otherwise this will not perfomed. 
    $this->renderLayout(); 
} 
public function saveAction(){ 
    $eventID = $this->getRequest()->getParam('event_id'); 
    $eventModel = Mage::getModel('example/event')->load($eventID); 
    if($data = $this->getRequest()->getPost()){ 
     try{ 
      $eventModel->addData($data)->save(); 
      Mage::getSingleton('adminhtml/session')->addSuccess(
       $this->__('Your event has been saved') 
      ); 
     }catch(Exception $e){ 
      Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); 
     } 
     $this->_redirect('*/*/index'); 
    } 
} 

}

und form.php Datei:

class MasteringMagento_Example_Block_Adminhtml_Event_Edit_Form extends Mage_Adminhtml_Block_Widget_Form{ 
protected function _prepareForm(){ 
    $form = new Varien_Data_Form(array('id'=>'edit_form', 
     'action'=>$this->getData('action'), 'method'=>'post')); 

    $fieldset = $form->addFieldset('base_fieldset', 
     array('legend'=>Mage::helper('example')->__('General Information'), 
      'class'=>'fieldset-wide')); 

    $fieldset->addField('name', 'text', array(
     'name' => 'name', 
     'label' => Mage::helper('example')->__('Event Name'), 
     'title' => Mage::helper('example')->__('Event Name'), 
     'required' => true 
    )); 

    $dateFormatIso = Mage::app()->getLocale()->getDateFormat(
     Mage_Core_Model_Locale::FORMAT_TYPE_SHORT); 
    $fieldset->addField('start', 'date', array(
     'name' => 'start', 
     'format' => $dateFormatIso, 
     'image' => $this->getSkinUrl('images/grid-cal.gif'), 
     'label' => Mage::helper('example')->__('Start Date'), 
     'title' => Mage::helper('example')->__('Start Date'), 
     'required' => true 
    )); 

    $fieldset->addField('end', 'date', array(
     'name' => 'end', 
     'format' => $dateFormatIso, 
     'image' => $this->getSkinUrl('images/grid-cal.gif'), 
     'label' => Mage::helper('example')->__('End Date'), 
     'title' => Mage::helper('example')->__('End Date'), 
     'required' => true 
    )); 

    $form->setUseContainer(true); 
    $this->setForm($form); 
    return parent::_prepareForm(); 
} 

}

Der Fehler, den ich denke, ist von meinem Controller. Wenn ich jedoch den URL-Link auf das Formular leite, wird es angezeigt. Aber wenn ich zu seinem Behälter befehle, der Edit.php ist, würde der Fehler oben auftreten:

class MasteringMagento_Example_Adminhtml_EventController extends Mage_Adminhtml_Controller_Action{ 
public function indexAction(){ 
    $this->loadLayout(); 
    $this->_addContent(
     $this->getLayout()->createBlock('example/adminhtml_event_edit')); 
    //go straight to the php file to render the form. otherwise this will not perfomed. 
    $this->renderLayout(); 
}} 

Dieses ist meine config.xml. Ich habe die Basisklasse für Magento Blöcke:

<blocks> 
     <example> 
      <class>MasteringMagento_Example_Block</class> 
     </example> 
    </blocks> 

Bitte helfen Sie mir, das Problem zu identifizieren. Danke

Antwort

0

createBlock() ist ein abstraktes Fabrikmuster für Blöcke innerhalb von Magento. Immer wenn Magento eine Factory-Klasse von dieser Methode nicht auflösen kann, wird ein Boolean zurückgegeben ... was in Ihrem Beispiel der Fall ist, wie die Fehlermeldung sagt.

Überprüfen Sie Ihre Klasse MasteringMagento_Example_Block_Adminhtml_Event_Edit auf Rechtschreib-, Gehäuse- oder Klassenfehler. Stellen Sie außerdem sicher, dass sich Ihre Klassendatei unter app/code/local/MasteringMagento/Example/Block/Adminhtml/Event/Edit.php befindet.

0

In Magento wird jeder Admin-Formularblock zuerst von einem Formularbehälter geladen.

Hier rufen Sie MasteringMagento_Example_Block_Adminhtml_Event_Edit Klasse:

$this->getLayout()->createBlock('example/adminhtml_event_edit') 

Diese Klasse befindet sich in app/code/local/MasteringMagento/Beispiel/Block/Adminhtml/Post/edit.php, etwas aussehen sollte this:

Wie Sie sehen können, sind alle Ihre Schaltflächen in der __construct() -Methode festgelegt.

Ich hoffe, es hilft.

Verwandte Themen