В Форме Администратора Magento Отсутствуют Данные Для Публикации
Я разрабатываю пользовательский модуль magento (1.9) и создал форму в администраторе для добавления/редактирования сущности под названием "подписка". Это приведет либо к созданию нового объекта подписки, либо к редактированию существующего объекта подписки.
Следующее мое SubscriptionController.php
<?php
class Beyondroid_Subscribepro_Adminhtml_SubscriptionsController extends Mage_Adminhtml_Controller_Action {
public function indexAction() {
$subscriptionsBlock = $this->getLayout()
->createBlock('beyondroid_subscribepro_adminhtml/subscriptions');
$this->loadLayout();
$this->_setActiveMenu('beyondroid_subscribepro');
$this->_addContent($subscriptionsBlock);
$this->getLayout()->getBlock('head')->setTitle($this->__('Beyondroid SubscribePro - Subscriptions'));
$this->renderLayout();
}
public function editAction() {
$subscription = Mage::getModel('subscribepro/subscriptions');
if ($subscriptionId = $this->getRequest()->getParam('id', false)) {
$subscription->load($subscriptionId);
if (!($subscription->getId())) {
$this->_getSession()->addError(
$this->__('This subscription no longer exists.')
);
}
}
//var_dump($this->getRequest()->getPost());
/**
if ($postData = $this->getRequest()->getPost('subscriptionsData')) {
try {
$subscription->addData($postData);
$subscription->save();
$this->_getSession()->addSuccess(
$this->__('Subscription data was updated')
);
return $this->_redirect(
'adminhtml/subscriptions/edit', array('id' => $subscription->getId())
);
} catch (Exception $e) {
Mage::logException($e);
$this->_getSession->addError($e->getMessage());
}
}
**/
Mage::register('current_subscription', $subscription);
$subscriptionEditBlock = $this->getLayout()->createBlock(
'beyondroid_subscribepro_adminhtml/subscriptions_edit'
);
$this->loadLayout()
->_addContent($subscriptionEditBlock)
->renderLayout();
}
public function saveAction() {
var_dump($this->getRequest()->getPost());
die();
}
protected function _isAllowed() {
$actionName = $this->getRequest()->getActionName();
$adminSession = Mage::getSingleton('admin/session');
$isAllowed = $adminSession->isAllowed('beyondroid_subscribepro/subscriptions');
return $isAllowed;
}
}
И вот Subscriptions/Edit/Form.php
class Beyondroid_Subscribepro_Block_Adminhtml_Subscriptions_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',
'enctype' => 'multipart/form-data',
));
$form->setUseContainer(true);
$fieldset = $form->addFieldSet(
'general',
array('legend' => 'Subscription Details')
);
$currentSubscription = $this->_getSubscription();
$fieldset->addField('product_id', 'text', array(
'label' => 'Product ID',
'required' => true,
'note' => 'This resembles the product ID for this subscription',
));
$fieldset->addField('deliveries', 'text', array(
'label' => 'No. of deliveries (in a month)',
'required' => true,
'note' => 'This resembles the number of deliveries to be made for this kind of a subscription in one month',
));
$fieldset->addField('unit_price', 'text', array(
'label' => 'Unit Price',
'required' => true,
'note' => 'This defines how much each delivery costs',
));
$form->setValues($currentSubscription->getData());
$this->setForm($form);
return parent::_prepareForm();
}
protected function _getSubscription() {
if (!$this->hasData('subscriptions')) {
$subscription = Mage::registry('current_subscription');
if (!$subscription instanceof
Beyondroid_Subscribepro_Model_Subscriptions) {
$subscription = Mage::getModel(
'beyondroid_subscribepro/subscriptions'
);
}
$this->setData('subscription', $subscription);
}
return $this->getData('subscription');
}
}
Форма загружается правильно в обоих случаях создания/редактирования (как видно на изображении выше). Проблема в том, когда я пытаюсь сохранить в форме я не получаю никаких почтовых данных. Нажатие кнопки "Сохранить" приводит к методу saveAction
в моем контроллере, но данные post представляют собой массив только с 1 парой значений ключа, т. Е. form_key => 'some random string'
.
Ниже приводится то, что возвращает оператор var_dump
в методе saveAction
:
Есть идеи, чего мне здесь не хватает?
Обновление
Следующее, что я вижу в полезной нагрузке запроса, т.е. отсутствующие данные post: O
Обновление 2
HTML-структура формы выглядит нормально. Поля находятся внутри тегов <form></form>
и только 1 форма на странице.
1 answers
На вашем последнем скриншоте я вижу, что поля, которые вы отправляете, не имеют названия.
Посмотрите, например, на входные данные с идентификатором product_id
. атрибут name
пуст.
Я думаю, что проблема заключается в том, как вы определили свои поля.
Давайте возьмем это для примера:
$fieldset->addField('product_id', 'text', array(
'label' => 'Product ID',
'required' => true,
'note' => 'This resembles the product ID for this subscription',
));
В массиве конфигурации нет атрибута name
.
это должно быть что-то вроде этого:
$fieldset->addField('product_id', 'text', array(
'name' => 'product_id', //you are missing this in your code
'label' => 'Product ID',
'required' => true,
'note' => 'This resembles the product ID for this subscription',
));
Сделайте то же самое для других полей и повторите попытку.