Données de publication du formulaire d'administration Magento manquantes
Question
Je développe un module magento (1.9) personnalisé et j'ai créé un formulaire dans l'administrateur pour ajouter/modifier une entité appelée "abonnement".Cela créera un nouvel objet d'abonnement ou modifiera un objet d'abonnement existant.
Voici mon 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;
}
}
et voici le 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');
}
}
Le formulaire est chargé correctement dans les deux cas de création/modification (comme on peut le voir dans l'image ci-dessus).Le problème est que lorsque j'essaie de sauvegarder le formulaire, je ne reçois aucune donnée de publication.Cliquer sur le bouton Enregistrer redirige vers le saveAction
méthode dans mon contrôleur mais les données de publication sont un tableau avec seulement 1 paire clé-valeur, c'est-à-dire form_key => 'some random string'
.
Voici ce que var_dump
déclaration dans saveAction
la méthode renvoie :
Des idées, qu'est-ce qui me manque ici ?
Mise à jour
Voici ce que je vois dans la charge utile de la demande, c'est-à-diredonnées de message manquantes :O
Mise à jour 2
La structure HTML du formulaire semble correcte.Les champs sont à l'intérieur du <form></form>
balises et un seul formulaire sur la page.
La solution
Sur votre dernière capture d'écran, je vois que les champs que vous soumettez n'ont pas de nom.
Regardez l'entrée avec l'identifiant product_id
Par exemple.le name
l'attribut est vide.
Je pense que le problème vient de la façon dont vous avez défini vos champs.
Prenons ceci par exemple :
$fieldset->addField('product_id', 'text', array(
'label' => 'Product ID',
'required' => true,
'note' => 'This resembles the product ID for this subscription',
));
Il n'y a pas name
attribut dans le tableau de configuration.
ça devrait être quelque chose comme ça :
$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',
));
faites de même pour les autres champs et réessayez.