ФорумПрограммированиеPHP для идиотов → editAction в ZF

editAction в ZF

  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 27 марта 2011 г. 1:33

    Делаю простое CRUD-приложение на ZF по руководству http://zend-framework.ru/getting-started/. Так вот когда дошёл до экшена editAction столкнулся с такой проблемой: по умолчанию у нас запускается indexAction и выводит список товаров с ссылками на редактирование каждой, когда же я нажимаю на одну из ссылок, то запускается экшн редактирования и в адресной строке передаётся параметр 'id' выбранного для редактирования товара. Дальше editAction должен вывести заполненную форму теми данными, которые соответствуют тому 'id', который мы передаем, но он почему-то всё время думает, что мы ему даем 'id'=1..не могу в коде найти проблему, также пробовал брать исходники с руководства - у них тоже самое.. Может кто подскажет?
    Спустя 194 сек.
    Код экшена:
     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));
    }
    }

    }
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 27 марта 2011 г. 1:45, спустя 12 минут 1 секунду

    Попробуй, сначала вместо


    $id = $this->_getParam("id", 0);


    написать


    $id = (int)$this->getRequest()->getParam("id");


    Это делать не надо:


    $form->populate($formData);


    В $form->isValid() данные будут заполнены автоматически
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 27 марта 2011 г. 2:49, спустя 1 час 4 минуты 9 секунд


    Попробуй, сначала вместо


    $id = $this->_getParam("id", 0);


    написать


    $id = (int)$this->getRequest()->getParam("id");


    Это делать не надо:


    $form->populate($formData);


    В $form->isValid() данные будут заполнены автоматически


    Спасибо, действительно и без этой строки метод isValid() справляется….а вот изменение строки кода для получения id не помогло…
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 27 марта 2011 г. 3: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();
    }
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 27 марта 2011 г. 3:34, спустя 18 минут 50 секунд

    а вот и ошибка в методе getAlbum() :
    $row = $this->fetchRow('id = '.$id);

Пожалуйста, авторизуйтесь, чтобы написать комментарий!