public function indexAction() { // форма для добавления нап.бутылок $form = new Application_Form_FilledBottle(); // если есть post данные if ($this->getRequest()->isPost()) { $request = $this->getRequest(); // и они валидны if ($form->isValid($request->getPost())) { // создаём объект нап.бутылки (попутно объект её бутылки и напитка) $formValues = $form->getValues(); $filledBottle = new Application_Model_FilledBottles(); $bottle = new Application_Model_Bottles(); $bottle->setId($formValues['bottle_id']); $beverage = new Application_Model_Beverages(); $beverage->setId($formValues['beverage_id']); $filledBottle->setName($formValues['name'])->setBeverage($beverage)->setBottle($bottle); // сохраняем новую нап.бутылку $this->filledBottles->save($filledBottle); // добавляем сообщение об удачном добавлении $this->_flashMessenger->addMessage('Наполненная бутылка ' . $filledBottle->getName() . ' добавлена'); return $this->_helper->redirector('index'); } } // отправляем нап.бутылку и форму в вид $this->view->filledBottles = $this->filledBottles->fetchAll(); $this->view->form = $form; }
/** * создает объект наполненной бутылки * * @param Object $row * @return Application_Model_FilledBottles $bottle */ private function createFilledBottle($row) { // создаём объект бутылки $bottle = new Application_Model_Bottles(); $bottle->setId($row->bottle_id)->setName($row->bottle_name)->setDescription($row->bottle_description)->setImg($row->bottle_img_src); // создаём объект напитка $beverage = new Application_Model_Beverages(); $beverage->setId($row->beverage_id)->setName($row->beverage_name)->setDescription($row->beverage_description); // создаём объект наполненной бутылки $filledBottle = new Application_Model_FilledBottles(); $filledBottle->setId($row->id)->setName($row->name)->setBottle($bottle)->setBeverage($beverage); return $filledBottle; }
/** * сохраняет напиток * * @param Application_Model_Beverages $beverage * @return Application_Model_Beverages $beverage */ public function save(Application_Model_Beverages $beverage) { $data = array('name' => $beverage->getName(), 'description' => $beverage->getDescription()); // если напитка не существовало, то добавляем строку в бд // и устанавливаем объекту соответствующий id if (null === ($id = $beverage->getId())) { $id = $this->getDbTable()->insert($data); $beverage->setId($id); } else { // если существовал, то делаем update $this->getDbTable()->update($data, array('id = ?' => $id)); } return $beverage; }
/** * удаление напитка */ public function deleteAction() { // получаем id напитка (используется роутер deletebeverages, см. конфиг в /configs/routes.ini) $beverageId = $this->_getParam('beverageId'); if (is_numeric($beverageId)) { $beverage = $this->beverages->find($beverageId); if (null != $beverage) { $form = new Application_Form_DeleteBeverages(); if ($this->getRequest()->isPost()) { $request = $this->getRequest(); if ($form->isValid($request->getPost())) { // если всё в порядке, создаём объект напитка $beverage = new Application_Model_Beverages(); $formValues = $form->getValues(); $beverage->setId($formValues['id']); // удаляем напиток $this->beverages->delete($beverage); // обновляем поисковый индекс (см. примечание к индекс-экшну) $searchDoc = new Application_Model_SearchDoc(); $searchDoc->setId($beverage->id); $search = new Application_Model_Search(); $search->deleteFromIndex($searchDoc); // добавляем сообщение об удачном удалении $this->_flashMessenger->addMessage('Напиток удалён'); return $this->_helper->redirector('index'); } } else { $form->setDefaults(array('id' => $beverage->id)); } $this->view->form = $form; $this->view->beverage = $beverage; } else { throw new Zend_Controller_Action_Exception('beverage not found', 404); } } else { throw new Zend_Controller_Action_Exception('invalid format of beverage id: ' . $bottleId, 404); } }