Я пытаюсь создать реальную сетку, основанную на модели пурпурного цвета. Все работает хорошо на прочитанной части, но форма для редактирования не отображается, и у меня нет ошибок в журналах. Я заметил, что моя функция _prepareForm никогда не вызывается, но я не знаю, почему.
Мой вызов формы в контроллере:
public function editAction()
{
$this->_initAction();
// Get id if available
$id = $this->getRequest()->getParam('contact_request_id');
$model = Mage::getModel('whatever_booking/contactRequest');
if ($id) {
// Load record
$model->load($id);
// Check if record is loaded
if (!$model->getId()) {
Mage::getSingleton('adminhtml/session')->addError($this->__('This Contact Request no longer exists.'));
$this->_redirect('*/*/');
return;
}
}
$this->_title($model->getId() ? $model->getName() : $this->__('New Contact Request'));
$data = Mage::getSingleton('adminhtml/session')->getContactRequestData(true);
if (!empty($data)) {
$model->setData($data);
}
Mage::register('whatever_booking', $model);
$this->_addBreadcrumb($id ? $this->__('Edit Contact Request') : $this->__('New Contact Request'), $id ? $this->__('Edit Contact Request') : $this->__('New Contact Request'));
$block = $this->getLayout()->createBlock('whatever_booking/adminhtml_contactRequest_edit')->setData('action', $this->getUrl('*/*/save'));
$this->getLayout()->getBlock('content')->append($block);
$this->renderLayout();
}
protected function _initAction()
{
$this->loadLayout()
->_setActiveMenu('customer/ContactRequest')
->_title($this->__('Whatever Booking'))->_title($this->__('Contact Request'));
return $this;
}
И моя форма:
class Whatever_Booking_Block_Adminhtml_ContactRequest_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
/**
* Init class
*/
public function _construct()
{
parent::_construct();
$this->setId('whatever_booking_contactRequest_form');
$this->setTitle($this->__('Contact Request Information'));
//when i var dump here i see that my controller called this function
}
protected function _prepareForm()
{
var_dump('here');
die; // this var dump is never reached
}
}
блок редактирования
class Whatever_Booking_Block_Adminhtml_ContactRequest_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
/**
* Init class
*/
public function _construct()
{
$this->_blockGroup = 'whatever_booking';
$this->_controller = 'adminhtml_contactRequest';
parent::_construct();
$this->_updateButton('save', 'label', $this->__('Save Request'));
$this->_updateButton('delete', 'label', $this->__('Delete Request'));
}
/**
* Get Header text
*
* @return string
*/
public function getHeaderText()
{
if (Mage::registry('contact_request')->getId()) {
return $this->__('Edit Request');
}
else {
return $this->__('New Request');
}
}
protected function _prepareLayout()
{
// mage log is passing here when i display one
return parent::_prepareLayout();
}
Быстрое исправление: в вашем контроллере загружайте форму напрямую, однако лучше пройти мимо контейнера раньше, вы все равно можете назвать это так:
$this->loadLayout(array('default', 'adminhtml_contactRequest_edit_form'))
->_setActiveMenu('customer/ContactRequest');
затем в вашем файле xml бронирования для макета:
<layout>
<adminhtml_contactRequest_edit_form>
<reference name="content">
<block type="whatever_booking/adminhtml_contactRequest_edit_form" name="aeschbachbooking.form" />
</reference>
</adminhtml_contactRequest_edit_form>
</layout>
В действии вашего контроллера вы добавляете блок редактирования, а не блок формы:
<?php
// ...
$block = $this->getLayout()->createBlock('whatever_booking/adminhtml_contactRequest_edit')->setData('action', $this->getUrl('*/*/save'));
// ...
Является ли это Whatever_Booking_Block_Adminhtml_ContactRequest_Edit
блоком надлежащего Mage_Adminhtml_Block_Widget_Form_Container
? Контейнер формы отвечает за поиск правильной формы для загрузки. Он делает это в своей функции _prepareLayout
:
protected function _prepareLayout()
{
if ($this->_blockGroup && $this->_controller && $this->_mode) {
$this->setChild('form', $this->getLayout()->createBlock($this->_blockGroup . '/' . $this->_controller . '_' . $this->_mode . '_form'));
}
return parent::_prepareLayout();
}
Кроме того, я задаюсь вопросом, выбрасывает ли Camel-обсаженная часть ContactRequest
бросок Magento для цикла. Попробуйте сделать эту часть вашего блока Contactrequest
и посмотреть, работает ли это (вам придется переименовать свою папку и т.д.).