Я пытаюсь построить функцию редактирования для этой формы:
class Application_Form_ContactMethodSelected extends Zend_Form{
public function init()
{
$this->CompanyName = new Zend_Form_Element_Text('CompanyName', array('label' => 'Firma', 'required' => true));
$this->submit = new Zend_Form_Element_Submit('submit');
$this->submit->setLabel('Fertig');
$this->addElements(array($this->CompanyName,$this->submit));
}
}
Это мой контроллер:
class UploadController extends Zend_Controller_Action{
protected $clientTable;
protected $model;
protected $id;
public function init(){
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}
$this->clientTable = new Application_Model_DbTable_ClientTable();
$this->model = new Application_Model_DbTable_ClientTable();
$this->formClient = new Application_Form_ContactMethodSelected();
}
public function editAction()
{
if($this->id){
$results = $this->model->find($this->id);
$data = array();
//put results into our data array as name => value
foreach($results as $r)
{
$data['CompanyName'] = $r['CompanyName'];
}
//populate form
$this->formClient->populate($data);
}
if ($this->_request->isPost()) {
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}
$client = $this->clientTable->fetchRow(array('ID' =>$this->id));
if($this->id){$formClientData = $this->_request->getPost();}
// write to DB
$client->CompanyName = $request->getPost('CompanyName');//if($results){
// $where = $this->clientTable->getAdapter()->quoteInto('id = ?',$this->id);
//$client->update($client,$where);
//$this->clientTable->update($client, $where);//$this->clientTable->update($data, $where);
$client->save();
$this->_redirect('client/index');
exit;
}
$this->view->formClient = $this->formClient;
}
}
Я могу обновить свою первую запись в БД id=0
,
Но тогда я прошу /uploadcontroller/edit?id=2
Я все еще обновляю id=1
,
Благодарю.
Вот ошибка в вашем коде.
Вы сначала проверяете запрос isPost()
затем снова проверка запроса isGet()
который терпит неудачу (так как оба не могут быть правдой одновременно) и ваш $this->id
переменная не инициализируется. (поэтому неверная запись обновляется)
if ($this->_request->isPost()) {
$request = $this->getRequest();
if ($request->isGet())
{
$this->id = (int)$request->getParam('id');
}
.....
просто избавиться от запроса isGet()
состояние и использование id
параметр сразу.
Образец кода:
if ($this->_request->isPost()) {
$this->id = (int)$this->_request->getParam('id');
$client = $this->clientTable->fetchRow(array('ID' =>$this->id));
.....
Других решений пока нет …