У меня небольшая проблема. Я как бы понимаю, что нужно, но я новичок в ZF2, поэтому просто нужно толкать в правильном направлении.
В настоящее время у меня настроен маршрут, например, viewsystem/1
, который имеет форму [action][id]
.
Когда человек нажимает на ссылку, они меняют свой идентификатор, например, viewsystem/5
.
В модели, где я запускаю SQL, я хочу, чтобы идентификатор изменился для оператора SQL:
->where('system.Id = "'.$id.'" ')
Может ли кто-нибудь объяснить, где я могу «получить» параметр и использовать его как переменную в SQL? Нужно ли мне что-то делать в контроллере? Могу ли я просто использовать $_GET
или что-то еще?
Я обновил это, так как совершенно ясно видеть, что происходит. Маршрут для viewsystemAction()
отличается от маршрута ajaxviewsystemAction()
.
Когда я использую $id = (int) $this->params()->fromRoute('id', 0);
внутри viewsystemAction()
он перекликается с маршрутом id ссылки на страницу, например viewsystem/220
Когда я использую $id = (int) $this->params()->fromRoute('id', 0);
внутри ajaxviewsystemAction()
он отсылает 0 в качестве идентификатора маршрута.
Мне нужен маршрут, который будет проходить через эту функцию
private function getSourceViewAllSystems($id) { return $this->getSystemsTable()->fetchViewAllSystems($id); } public function viewsystemAction() { $id = (int) $this->params()->fromRoute('id', 0); echo $id; //i see the correct id for example 220 from the route in the browser } public function ajaxviewsystemAction() { $id = (int) $this->params()->fromRoute('id', 0); echo $id; //to see the id of the route with the ajax page //displays 0 and not the route id from the viewsystemAction $table = new TableExample\Advance(); $table->setAdapter($this->getDbAdapter()) ->setSource($this->getSourceViewAllSystems($id)) ->setParamAdapter($this->getRequest()->getPost()); return $this->htmlResponse($table->render('custom' , 'custom-b2')); }
Попробовать объяснить немного лучше, вот моя проблема.
Как вы можете видеть, я передаю параметр, как вы предложили в fetchViewAllSystems($id = 1);
fetchViewAllSystems
в моей модели и работает отлично, с 1 там, она отображает system1.
однако 1 должен быть идентификатором url.
$id = (int) $this->params()->fromRoute('id', 0);
Это получает идентификатор в viewaction, но viewaction не контролирует fetchViewAllSystems
поэтому довольно сложно передать это значение из URL- fetchViewAllSystems
.
private function getSourceViewAllSystems() { return $this->getSystemsTable()->fetchViewAllSystems($id = 1); } public function viewsystemAction() { $id = (int) $this->params()->fromRoute('id', 0); /*if (!$id) { return $this->redirect()->toRoute('systems', array( 'action' => 'activesystems' )); }*/ echo $id; } public function ajaxviewsystemAction() { /*$table = new TableExample\Base(); $table->setAdapter($this->getDbAdapter()) ->setSource($this->getSourceViewAllSystems()) ->setParamAdapter($this->getRequest()->getPost()) ; return $this->htmlResponse($table->render());*/ $table = new TableExample\Advance(); $table->setAdapter($this->getDbAdapter()) ->setSource($this->getSourceViewAllSystems()) ->setParamAdapter($this->getRequest()->getPost()) ; return $this->htmlResponse($table->render('custom' , 'custom-b2')); echo $id; }
Чтобы получить параметры $ _GET в вашем контроллере, выполните следующие действия:
// your IndexController.php public function indexAction(){ $viewmodel = new ViewModel(); // get the ID $id = $this->params('id', null); // null is my default value // ... return $viewmodel; }
Я настоятельно рекомендую вам ознакомиться с этим замечательным примером: https://github.com/akrabat/zf2-tutorial – http://zf2.readthedocs.org/ru/latest/ref/overview.html
Проверьте эту строку https://github.com/akrabat/zf2-tutorial/blob/master/module/Album/src/Album/Controller/AlbumController.php#L43
Получить параметры
$id = $this->params('id', null); // null is my default value
или
$id = $request->query()->get('foo', 'default value');
Ссылка: http://zend-framework-community.634137.n4.nabble.com/ZF2-How-to-set-get-params-in-url-td4076050.html
controller.php
Я не знаю, что возвращает getSystemsTable (), а также fetchViewAllSystems, но это должно быть так
private function getSourceViewAllSystems($id = 1) { return $this->getSystemsTable()->fetchViewAllSystems($id); } public function viewsystemAction() { $id = $this->params()->fromRoute('id', null); if (!$id) { return $this->redirect()->toRoute('systems', array( 'action' => 'activesystems' )); } echo $id; } public function ajaxviewsystemAction() { $id = $this->params()->fromRoute('id', null); $id = $this->params()->fromQuery()['id']; // if from ajax GET param $table = new TableExample\Advance(); $table->setAdapter($this->getDbAdapter()) ->setSource($this->getSourceViewAllSystems($id)) // send the current id ->setParamAdapter($this->getRequest()->getPost()) ; return $this->htmlResponse($table->render('custom' , 'custom-b2')); }