我有点理解需要什么,但我是ZF2的新手所以只需要朝着正确的方向努力。
我目前设置了路线,例如viewsystem/1
,其格式为[action][id]
。
当某人点击某个链接时,他们会更改其ID,例如viewsystem/5
。
在我运行SQL的模型中,我希望为SQL语句更改id:
->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作为路由ID。
我需要通过此功能的路线
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显示系统1。
但是,1需要是url id。
$id = (int) $this->params()->fromRoute('id', 0);
这会在viewaction中获取ID,但是viewaction不会控制fetchViewAllSystems
,因此从url传递此值非常棘手。
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;
}
答案 0 :(得分:2)
要在控制器中获取$ _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/en/latest/ref/overview.html
获取参数
$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'));
}