public function editAction()
{
$this->view->title = "Edit Albums";
$this->view->headTitle($this->view->title);
$form = new Application_Form_Album();
$form->submit->setLabel('Edit');
$this->view->form = $form;
if($this->getRequest()->isPost())
{
$formData = $this->getRequest()->getPost();
if($form->isValid($formData))
{
$id = (int)$form->getValue('id');
$artist = $form->getValue('artist');
$title = $form->getValue('title');
$albums = new Application_Model_DbTable_Albums();
$albums->updateAlbum($id, $artist, $title);
$this->_helper->redirector('index');
}
else
{
$form->populate($formData);
}
}
else
{
$id = $this->_getParam("id", 0);
if($id > 0)
{
$albums = new Application_Model_DbTable_Albums();
$form->populate($albums->getAlbum($id));
}
}
}
Форум → Программирование → PHP для идиотов → editAction в ZF
editAction в ZF
-
Делаю простое CRUD-приложение на ZF по руководству http://zend-framework.ru/getting-started/. Так вот когда дошёл до экшена editAction столкнулся с такой проблемой: по умолчанию у нас запускается indexAction и выводит список товаров с ссылками на редактирование каждой, когда же я нажимаю на одну из ссылок, то запускается экшн редактирования и в адресной строке передаётся параметр 'id' выбранного для редактирования товара. Дальше editAction должен вывести заполненную форму теми данными, которые соответствуют тому 'id', который мы передаем, но он почему-то всё время думает, что мы ему даем 'id'=1..не могу в коде найти проблему, также пробовал брать исходники с руководства - у них тоже самое.. Может кто подскажет?Спустя 194 сек.Код экшена:
-
27 марта 2011 г. 12:45, спустя 12 минут 1 секунду
Попробуй, сначала вместо
$id = $this->_getParam("id", 0);
написать
$id = (int)$this->getRequest()->getParam("id");
Это делать не надо:
$form->populate($formData);
В $form->isValid() данные будут заполнены автоматически -
27 марта 2011 г. 13:49, спустя 1 час 4 минуты 9 секунд
Попробуй, сначала вместо
$id = $this->_getParam("id", 0);
написать
$id = (int)$this->getRequest()->getParam("id");
Это делать не надо:
$form->populate($formData);
В $form->isValid() данные будут заполнены автоматически
Спасибо, действительно и без этой строки метод isValid() справляется….а вот изменение строки кода для получения id не помогло… -
27 марта 2011 г. 14:15, спустя 25 минут 39 секунд
метод getAlbum:public function getAlbum($id)
{
$id = (int)$id;
$row = $this->fetchRow($id);
if(!$row)
{
throw new Exception('Can not select from db!');
}
return $row->toArray();
} -
27 марта 2011 г. 14:34, спустя 18 минут 50 секунд
а вот и ошибка в методе getAlbum() :$row = $this->fetchRow('id = '.$id);
Пожалуйста, авторизуйтесь, чтобы написать комментарий!