De Administración De Magento Post De Formulario Los Datos Que Faltan
Pregunta
Estoy desarrollando una costumbre de magento (1.9) módulo y he creado un formulario en el admin para añadir / editar una entidad llamada "suscripción".Esto creará un nuevo objeto de suscripción o editar un objeto de suscripción.
La siguiente es mi 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;
}
}
y aquí está el 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');
}
}
El formulario se carga correctamente en ambas nuevo/editar los casos (como se puede ver en la imagen de arriba).El problema es cuando trato de guardar el formulario, no me hago ningún post de los datos.Clic en el botón guardar que hace la ruta a la saveAction
método en mi controlador, pero el post de los datos es una matriz con sólo 1 valor de la clave par decir form_key => 'some random string'
.
Siguiente es lo que var_dump
declaración en saveAction
método devuelve:
Alguna idea de lo que me estoy perdiendo aquí ?
Actualización
Siguiente es lo que yo veo en la solicitud de carga es decir,faltan datos post :O
Actualización 2
La estructura html de la forma se ve bien.Los campos están dentro de la <form></form>
etiquetas y sólo 1 formulario en la página.
Solución
En su última captura de pantalla veo que los campos en los que la presentación no tiene un nombre.
Mira en la entrada con el id product_id
por ejemplo.el name
atributo está vacía.
Creo que el problema viene de la forma en que se definen sus campos.
Vamos a tomar esto por ejemplo:
$fieldset->addField('product_id', 'text', array(
'label' => 'Product ID',
'required' => true,
'note' => 'This resembles the product ID for this subscription',
));
No hay name
atributo en la configuración de la matriz.
debe ser algo como esto:
$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',
));
hacer lo mismo para el resto de los campos e inténtelo de nuevo.