В Форме Администратора 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');
    }
}

Form Loaded

Форма загружается правильно в обоих случаях создания/редактирования (как видно на изображении выше). Проблема в том, когда я пытаюсь сохранить в форме я не получаю никаких почтовых данных. Нажатие кнопки "Сохранить" приводит к методу saveAction в моем контроллере, но данные post представляют собой массив только с 1 парой значений ключа, т. Е. form_key => 'some random string'.

Ниже приводится то, что возвращает оператор var_dump в методе saveAction:

No Post Data

Есть идеи, чего мне здесь не хватает?

Обновление

Следующее, что я вижу в полезной нагрузке запроса, т.е. отсутствующие данные post: O

enter image description here

Обновление 2

HTML-структура формы выглядит нормально. Поля находятся внутри тегов <form></form> и только 1 форма на странице.

enter image description here

Author: Community, 2015-11-10

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',
    ));

Сделайте то же самое для других полей и повторите попытку.

 7
Author: Marius, 2015-11-10 14:32:42