我正在努力学习有关 Zend Framework 的一些知识,但我被困在如此简单的操作上,例如“编辑”数据库条目。
我在 MySQL 数据库中有联系人列表,我的目的是用一行中的信息填写表格,编辑它并将其保存回数据库(更新语句)。我尝试了几乎所有想到的东西,查看了谷歌和有关 ZF 的书籍,但始终存在一些问题。此时,当我想要更新时,zf 和 mysql 将创建新的数据库条目,并填充新的 id 和编辑的信息,但这显然不是我想要做的,因为我得到的不是数据库中的一个更新条目两个 - 旧的和具有更新信息的新的。
这是我的代码的重要部分...请看一下,我不知道我在这里遗漏了什么。
部分索引 Controller :
public function createcontactAction()
{
$createContactForm = $this->_helper->_formLoader('addContact');
$this->view->addContactForm = $createContactForm;
}
public function editcontactAction()
{
$id = $this->getRequest()->getParam('id');
$contactModel = new Application_Model_Contacts();
$contactRow = $contactModel->find($id)->current();
$addContactForm = $this->_helper->formLoader('addContact');
if ($this->getRequest()->isPost() && $this->getRequest()->getPost('send', false) !== false) {
if ($addContactForm->isValid($this->getRequest()->getPost())) {
$contactRow->setFromArray($addContactForm->getValues());
$contactRow->save();
$this->_redirect('/index/editcontact/id/' . $contactRow->id);
}
} else {
$addContactForm->populate($contactRow->toArray());
}
$this->view->addContactForm = $addContactForm;
}
public function savecontactAction()
{
$form = $this->_helper->formLoader('addContact');
if ($this->getRequest()->isPost() && $this->getRequest()->getPost('send', false) !== false) {
if ($form->isValid($this->getRequest()->getPost())) {
$contactModel = new Application_Model_Contacts();
$contactRow = $contactModel->createRow($form->getValues());
$contactRow->save();
$this->_redirect('/index/editcontact/id/' . $contactRow->id);
}
}
$this->view->form = $form;
}
表单 - 重要的部分:
类 Application_Form_AddContact 扩展 Zend_Form {
public function init()
{
$this->setAction('/index/savecontact');
$this->setMethod(Zend_Form::METHOD_POST);
$this->setAttrib('id', 'index_savecontact');
$contactFirstName = new Zend_Form_Element_Text('first_name', array('size'=>32, 'maxlength'=>64, 'label'=>'Křestní', 'required'=>false));
$contactLastName = new Zend_Form_Element_Text('last_name', array('size'=>32, 'maxlength'=>64, 'label'=>'Přímění', 'required'=>true));
.
.
.
$contactNotes = new Zend_Form_Element_Textarea('notes', array('cols'=>32, 'rows'=>1, 'label'=>'Poznámky', 'required'=>false));
$contactSend = new Zend_Form_Element_Submit('send', array('label'=>'Odeslat'));
$this->addElements(array ($contactFirstName, $contactLastName, $contactStreet, $contactHouseNumber, $contactCity, $contactZipCode, $contactCountry,
$contactPhoneNumber, $contactMobileNumber, $contactEmail, $contactWebPage, $contactCrn, $contactVat, $contactNotes, $contactSend));
非常感谢!
(如果您还需要帮助我,请直接提出)
编辑:
这里是联系人模型:
class Application_Model_Contacts extends Zend_Db_Table_Abstract
{
protected $_name = 'contacts';
protected $_primary = 'id';
}
最佳答案
我对 Zend_Db_Table
和 Zend_Db_Table_Row
有点生疏(我假设这是你的模型使用的),但我敢打赌你是在您的 $contactRow
中缺少主键 (PK) - 我猜您可能没有通过表单提供它,因为我看到您是通过 GET
获得的。因此,只需将 $contactRow
中的 id
设置为 $id
就可以了。
关于php - 实体 CRUD 操作 - 编辑(更新)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8938739/