Zendframework 2. ID-параметр в SQL-запросе

У меня небольшая проблема. Я как бы понимаю, что нужно, но я новичок в 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-tutorialhttp://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')); }