Я создал файл javascript, который содержит js для запуска события в списке выпадающего списка. JS находится ниже:
// /public/js/custom.js jQuery(function($) { $("#parent").change(function(event){ event.preventDefault(); var parentID = $('#parent').val(); var id = $('#id').val(); $.post("/menu/GetMenuChildren", {pID: parentID, thisID: id }, function(data){ if(data.response === true){ var $el = $("#Position"); $el.empty(); // remove old options $.each(data.newOptions, function(key, value) { $el.append($("<option></option>") .attr("value", value).text(key)); }); } else { // print error message alert("something went wrong in Post"); } }, 'json'); alert("After Post"); }); });
В моем Controller.php у меня есть функция GetMenuChildrenAction, как показано ниже:
public function GetMenuChildrenAction() { $request = $this->getRequest(); $response = $this->getResponse(); if ($request->isPost()) { $post_data = $request->getPost(); $parent_id = $post_data['pID']; $id = $post_data['thisID']; //$this->form->get('Position')->SetOptionValues( $newOptions = $this->getMenuTable()->GetPositionsByID($parent_id, $id); if(isset($newOptions)) { $response->setContent(\Zend\Json\Json::encode(array('response' => true, 'newOptions' => $newOptions))); } else { $response->setContent(\Zend\Json\Json::encode(array('response' => false))); } } return $response; }
В MenuTable.php существует метод GetPositionsByID, как показано ниже:
public function GetPositionsByID($parentID, $id) { if($parentID == 0) { $menu = $this->getMenu($this->id); $parentID = $menu->parent_id; } if(isset($parentID)) { $sql = "Select ID,Label from Menu Where parent_ID = " . $parentID . " and id > 1 and id <> " . $id . " Order by Position,Label"; try { $statement = $this->adapter->query($sql); } catch(Exception $e) { console.log('Caught exception: ', $e->getMessage(), "\n"); } $res = $statement->execute(); $rows = array(); $i = 0; foreach ($res as $row) { $i = $i + 1; $rows[$i] = array ( $i => $row['Label'] ); } return $rows; } return array(); }
Кажется, что все правильно подключено, когда я отлаживаю код, я получаю эту строку:
$statement = $this->adapter->query($sql);
и тогда ничего не происходит. Если я заменил весь код в методе GetPositionsByID и просто вернул массив следующим образом:
return array('1' => 'one', '2' => 'two');
он отлично работает, однако я хочу получить данные из БД. Кто-нибудь знает, почему в этой строке не произойдет выполнение?
$statement = $this->adapter->query($sql);
заранее спасибо
Проблема заключалась в том, что адаптер был нулевым.