Php Magento-试图创建一个编辑管理表单,但它在表单中提供空白输入字段

Php Magento-试图创建一个编辑管理表单,但它在表单中提供空白输入字段,php,magento,Php,Magento,我正在使用Magento 1.9.0.1 我正在开发一个自定义Magento扩展,到目前为止,我已经在管理面板中创建了一些自定义页面。在其中一个表中,我添加了一个网格表,它从自定义MySQL表中获取结果 让我向您展示此页面的屏幕截图: 问题就出在这里,当编辑表单打开时,表单中的输入字段是空的。它们不能是空的。。。正如您所知,这是一个编辑表单,必须有一个数据进行编辑 以下是一个屏幕截图: 正如您所看到的,字段是空的。。。这就是问题所在 让我向您展示我认为对解决问题很重要的所有代码 以下是我在:

我正在使用Magento 1.9.0.1

我正在开发一个自定义Magento扩展,到目前为止,我已经在管理面板中创建了一些自定义页面。在其中一个表中,我添加了一个网格表,它从自定义MySQL表中获取结果

让我向您展示此页面的屏幕截图:

问题就出在这里,当编辑表单打开时,表单中的输入字段是空的。它们不能是空的。。。正如您所知,这是一个编辑表单,必须有一个数据进行编辑

以下是一个屏幕截图:

正如您所看到的,字段是空的。。。这就是问题所在

让我向您展示我认为对解决问题很重要的所有代码

以下是我在:/app/code/community/VivasIndustries/SmsNotification/etc/config.xml中看到的内容:

<?xml version="1.0"?>
<config>
  <modules>
    <VivasIndustries_SmsNotification>
      <version>0.1.0</version>
    </VivasIndustries_SmsNotification>
  </modules>
  <global>
    <models>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Model</class>
            <resourceModel>vivasindustries_smsnotification_resource</resourceModel>
        </smsnotification>
        <vivasindustries_smsnotification_resource>
        <class>VivasIndustries_SmsNotification_Model_Resource</class>
        <entities>
            <smsnotification>
            <table>VivasIndustries_SmsNotification</table>
            </smsnotification>
        </entities>
        </vivasindustries_smsnotification_resource>
    </models>
    <resources>
        <smsnotification_setup>
            <setup>
                <module>VivasIndustries_SmsNotification</module>
            </setup>
            <connection>
                 <use>core_setup</use>
             </connection>
        </smsnotification_setup>
        <smsnotification_read>
            <connection>
                <use>core_read</use>
            </connection>
        </smsnotification_read>
        <smsnotification_write>
            <connection>
                <use>core_write</use>
            </connection>
        </smsnotification_write>
    </resources>    
    <events>
        <sales_order_save_after>
            <observers>
                <vivasindustries_smsnotification>
                    <class>smsnotification/observer</class>
                    <method>orderSaved</method>
                </vivasindustries_smsnotification>
            </observers>
        </sales_order_save_after>
    </events>
    <helpers>
        <smsnotification>
            <class>VivasIndustries_SmsNotification_Helper</class>
        </smsnotification>
    </helpers>
    <blocks>
        <smsnotification>
             <class>VivasIndustries_SmsNotification_Block</class>
        </smsnotification>
    </blocks>
  </global>
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <vivas>
                                        <title>Vivas - All</title>
                                    </vivas>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
    <layout>
        <updates>
            <smsnotification>
                <file>smsnotification.xml</file>
            </smsnotification>
        </updates>
    </layout>   
    </adminhtml>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>  

0.1.0
VivasiIndustries\u SmsNotification\u模型
活力工业资源
VivasiIndustries\u SmsNotification\u Model\u资源
活力工业
活力工业
核心单元设置
核心读取
核心写入
smsnotification/观察员
订单保存
VivasiIndustries\u SmsNotification\u助手
VivasiIndustries\u SmsNotification\u Block
允许一切
万岁
smsnotification.xml
VivasiIndustries\u SmsNotification\u Adminhtml
以下是我在:/app/code/community/VivasIndustries/SmsNotification/controllers/Adminhtml/SmsorderstatusesController.php中的内容:

<?php

class VivasIndustries_SmsNotification_Adminhtml_SmsorderstatusesController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->_title($this->__('SMS Center'))->_title($this->__('SMS Center'));
        $this->loadLayout();
        $this->_setActiveMenu('vivassms');
        $this->_addContent($this->getLayout()->createBlock('smsnotification/adminhtml_sms_status'));
        $this->renderLayout();
    }

    public function gridAction()
    {
        $this->loadLayout();
        $this->getResponse()->setBody(
            $this->getLayout()->createBlock('smsnotification/adminhtml_sms_status_grid')->toHtml()
        );
    }

   public function newAction()
    {  
        $this->loadLayout();
        $this->_setActiveMenu('vivassms');
        $this->renderLayout();
    }  



    public function editAction()
    {
        /**
         * Retrieve existing brand data if an ID was specified.
         * If not, we will have an empty brand entity ready to be populated.
         */
        $brand = Mage::getModel('smsnotification/smsnotification');



        // process $_POST data if the form was submitted
        if ($postData = $this->getRequest()->getPost('smsData')) {
            try {
                $brand->addData($postData);
                $brand->save();

                $this->_getSession()->addSuccess(
                    $this->__('The brand has been saved.')
                );

                // redirect to remove $_POST data from the request
                return $this->_redirect(
                    'smsorderstatuses/edit',
                    array('id' => $brand->getId())
                );
            } catch (Exception $e) {
                Mage::logException($e);
                $this->_getSession()->addError($e->getMessage());
            }

            /**
             * If we get to here, then something went wrong. Continue to
             * render the page as before, the difference this time being
             * that the submitted $_POST data is available.
             */
        }

        // Make the current brand object available to blocks.
        Mage::register('sms_brand', $brand);

        // Instantiate the form container.
        $brandEditBlock = $this->getLayout()->createBlock(
            'smsnotification/adminhtml_sms_status_edit'
        );

        // Add the form container as the only item on this page.
        $this->loadLayout()
            ->_addContent($brandEditBlock)
            ->renderLayout();
    }

    public function deleteAction()
    {
        $smsnotification = Mage::getModel('vivasindustries_smsnotification/smsnotification');

        if ($smsnotificationId = $this->getRequest()->getParam('id', false)) {
            $smsnotification->load($smsnotificationId);
        }

        if (!$smsnotification->getId()) {
            $this->_getSession()->addError(
                $this->__('This smsnotification no longer exists.')
            );
            return $this->_redirect(
                '*/*/index'
            );
        }

        try {
            $smsnotification->delete();

            $this->_getSession()->addSuccess(
                $this->__('The smsnotification has been deleted.')
            );
        } catch (Exception $e) {
            Mage::logException($e);
            $this->_getSession()->addError($e->getMessage());
        }

        return $this->_redirect(
            '*/*/index'
        );
    }   

    protected function _initAction()
    {
        $this->loadLayout()
            // Make the active menu match the menu config nodes (without 'children' inbetween)
            ->_setActiveMenu('vivassms')
            ->_title($this->__('SMS Rule'))->_title($this->__('SMS Center'))
            ->_addBreadcrumb($this->__('SMS Rule'), $this->__('SMS Rule'));

        return $this;
    }


    protected function _isAllowed()
    {
        return Mage::getSingleton('admin/session')->isAllowed('sales/foo_bar_baz');
    }
}

我认为您在控制器的editAction()中做了更多的工作

 public function getRowUrl($row)
{
    return $this->getUrl('*/*/edit', array('id'=>$row->getId()));
}
在这里,它返回行的id。您需要使用此“id”

$id = $this->getRequest()->getParam('id');
从模型中获取数据

你真正需要做的事情是在你的生活中

/app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status/Edit/Form.php

在文件末尾放置此代码

$id = Mage::app()->getRequest()->getParam('id');
$model= Mage::getModel('smsnotification/smsnotification')->load($id);
  $form->setValues($model->getData());

试试这个。希望这会有所帮助。

您应该在Grid.php上的每个字段中添加一个属性“index”

在form.php上,您可以使用以下索引创建a字段: 例如:

Grid.php:

$this->addColumn('id_provider', array(
        'header' => 'Provider',
        'align' => 'left',
        **'index' => 'id_provider',**


    ));
在form.php上:

$fieldset->addField(**'id_provider'**, 'text', array(
        'label' => 'Provider',
        'name' => 'provider',
        'required' => true,

    ));

我不明白。我必须在哪个文件中从什么编辑到什么?提前谢谢!通过这个链接。在这个类“Excellence\u Form\u Block\u Adminhtml\u Form\u Edit\u Tab\u Form”中,检查受保护的函数_prepareForm(){$Form=new Varien\u Data\u Form();$this->setForm($Form);我认为这个setForm()做的诀窍。分享你将得到的。请给我一个详细的编辑我的代码的方式,你认为它必须工作。我不明白你要我做什么。提前谢谢!不要误会我bt尝试更多的frm你方我想让你得到$id在_perpareForm()函数并在您的模型中使用它,即在“smsnotification/smsnotification”的情况下,并在表单中设置值。请尝试以下代码$id=Mage::app()->getRequest()->getParam('id'));//将此id加载到模型$model=Mage::getModel('smsnotification/smsnotification')->load($id);$form->setValues($model->getData());将其置于$this->setForm($form)之前;希望这能起作用。你能用你最后的评论意见编辑答案吗?因为评论中的描述太混乱了。当你在评论中发布代码时,我无法获得正确的代码。我将非常感谢!
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
    protected function _construct()
    {
        $this->_blockGroup = 'smsnotification';
        $this->_controller = 'adminhtml_sms_status';


        $this->_mode = 'edit';

        $newOrEdit = $this->getRequest()->getParam('id')
            ? $this->__('Edit')
            : $this->__('New');
        $this->_headerText =  $newOrEdit . ' ' . $this->__('SMS Rule');
    }
}
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
    protected function _prepareForm()
    {
        // Instantiate a new form to display our brand for editing.
        $form = new Varien_Data_Form(array(
            'id' => 'edit_form',
            'action' => $this->getUrl(
                'smsorderstatuses/edit',
                array(
                    '_current' => true,
                    'continue' => 0,
                )
            ),
            'method' => 'post',
        ));
        $form->setUseContainer(true);
        $this->setForm($form);

        // Define a new fieldset. We need only one for our simple entity.
        $fieldset = $form->addFieldset(
            'general',
            array(
                'legend' => $this->__('Brand Details')
            )
        );

        $brandSingleton = Mage::getSingleton(
            'smsnotification/smsnotification'
        );

        // Add the fields that we want to be editable.
        $this->_addFieldsToFieldset($fieldset, array(
            'Receiver' => array(
                'label' => $this->__('Receiver'),
                'input' => 'text',
                'required' => true,
            ),
            'Phone' => array(
                'label' => $this->__('Phone'),
                'input' => 'text',
                'required' => true,
            ),
            'Date' => array(
                'label' => $this->__('Date'),
                'input' => 'text',
                'required' => true,
            ),
        ));

        return $this;
    }

    protected function _addFieldsToFieldset(
        Varien_Data_Form_Element_Fieldset $fieldset, $fields)
    {
        $requestData = new Varien_Object($this->getRequest()
            ->getPost('smsnotificationData'));

        foreach ($fields as $name => $_data) {
            if ($requestValue = $requestData->getData($name)) {
                $_data['value'] = $requestValue;
            }

            // Wrap all fields with brandData group.
            $_data['name'] = "smsnotificationData[$name]";

            // Generally, label and title are always the same.
            $_data['title'] = $_data['label'];

            // If no new value exists, use the existing brand data.
            if (!array_key_exists('value', $_data)) {
                $_data['value'] = $this->_getSms()->getData($name);
            }

            // Finally, call vanilla functionality to add field.
            $fieldset->addField($name, $_data['input'], $_data);
        }

        return $this;
    }

    protected function _getSms()
    {
        if (!$this->hasData('smsnotification')) {
            // This will have been set in the controller.
            $smsnotification = Mage::registry('sms_brand');

            // Just in case the controller does not register the brand.
            if (!$smsnotification instanceof
                    VivasIndustries_SmsNotification_Model_Smsnotification) {
                $smsnotification = Mage::getModel(
                    'smsnotification/smsnotification'
                );
            }

            $this->setData('smsnotification', $smsnotification);
        }

        return $this->getData('smsnotification');
    }
}
 public function getRowUrl($row)
{
    return $this->getUrl('*/*/edit', array('id'=>$row->getId()));
}
$id = $this->getRequest()->getParam('id');
$id = Mage::app()->getRequest()->getParam('id');
$model= Mage::getModel('smsnotification/smsnotification')->load($id);
  $form->setValues($model->getData());
$this->addColumn('id_provider', array(
        'header' => 'Provider',
        'align' => 'left',
        **'index' => 'id_provider',**


    ));
$fieldset->addField(**'id_provider'**, 'text', array(
        'label' => 'Provider',
        'name' => 'provider',
        'required' => true,

    ));