سؤال

أقوم بتطوير وحدة ماجنتو (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 الطريقة في وحدة التحكم الخاصة بي ولكن بيانات النشر عبارة عن مصفوفة تحتوي على زوج قيمة مفتاح واحد فقط، على سبيل المثال. form_key => 'some random string'.

فيما يلي ما var_dump بيان في saveAction إرجاع الطريقة:

No Post Data

أي أفكار ما الذي أفتقده هنا؟

تحديث

فيما يلي ما أراه في حمولة الطلب، أي:بيانات المشاركة المفقودة :O

enter image description here

تحديث 2

تبدو بنية html للنموذج جيدة.الحقول موجودة داخل <form></form> العلامات ونموذج واحد فقط على الصفحة.

enter image description here

هل كانت مفيدة؟

المحلول

في لقطة الشاشة الأخيرة الخاصة بك، أرى أن الحقول التي ترسلها ليس لها اسم.

انظر إلى الإدخال بالمعرف 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',
    ));

افعل نفس الشيء مع الحقول الأخرى وحاول مرة أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top