如何通过 Response/Request 发送数组?
How to send an Array by Response/Request?
我有以下问题:
我使用具有这两个功能的控制器:
两个函数都有自己的路由@see routing
public function indexAction(Request $request)
{
$searchForm = $this->getSearchForm();
$searchForm->handleRequest($request);
**$data** = $searchForm->getData();
if($searchForm->isValid()){
if(!$data['birthdate'] && !$data['birthyear'] && !$data['patientID'] && !$data['patientNO']){
$searchForm->addError(new FormError("Please specify at least one search parameter."));
}
else
{
return $this->forward('GeneralCommonBundle:DataHome:result', array(
'limit' => '20',
'offset' => '0'
));
//return $this->redirect($this->generateUrl('result', array('limit' => '20', 'offset' => '0')));
}
}
. . . . .
}
public function resultAction(Request $request, $limit, $offset){
$repo = $this->getDoctrine()->getManager()->getRepository('DataLiveBundle:DataAPatient');
$qb = $repo->getFindingPatientQuery($data['birthdate'],
$data['patientID'],$data['birthyear'] ,$data['patientNO'], $data['center'], $data['registry'] ,$data['study']);
$total = $repo->countQueryResults($qb);
$qb = $repo->addLimitToQuery($qb, $limit, $offset);
$paginationOptions = array(
'total' => $total,
'limit' => $limit,
'offset' => $offset
);
//$query = $qb->getQuery();
$entities = $repo->getResults($qb);
return $this->render('GeneralCommonBundle:DataHome:show.html.twig', array(
'records'=> $entities,
'isNew' => false,
'paginationOptions' => $paginationOptions,
'newrecord' => false,
'birthdate'=> $data['birthdate'],
'patientID'=> $data['patientID'],
'birthyear'=> $data['birthyear'],
'patientNO'=> $data['patientNO'],
'center' => $data['center'],
'registry' => $data['registry'],
'study' => $data['study']
));
}
在函数 indexAction 中,我应该转到下一个函数 (resultAction),因为我需要一个新的 URL。我还需要 Array $data ,它是 generated 在函数 indexAction 中,在函数 resultAction 中,但我不知道,我如何可以使用数组作为参数调用路由。
路由文件看起来是这样的:
dataHome:
pattern: /home
defaults: { _controller: "GeneralCommonBundle:DataHome:index"}
result:
pattern: /{limit}/{offset}/result
defaults: { _controller: "GeneralCommonBundle:DataHome:result", limit: 20, offset: 0 }
我尝试使用全局变量(我知道这不是一个很好的范例),因为函数在同一个控制器中,但它不起作用。我也尝试将 $data 数组放入响应中..但它也不起作用..
如何使用数组作为参数调用路由?
或者临时存储这个数组,转发后我可以使用它?
感谢您的支持!!
你当然可以在路由中作为参数发送,这是我的快速测试:
public function testAction()
{
$testArray = [
'data1' => 'data',
'data2' => 'data'
];
return $this->forward('App\Controller\TestController::otherAction', [
'data' => serialize($testArray)
]);
}
public function otherAction($data)
{
$data = unserialize($data);
return new JsonResponse($data);
}
但是请记住,GET 对字符串长度有一些限制,我认为使用会话变量会更合适,只需在 indexAction 中设置序列化数据,然后在 resultAction 中获取它
我有以下问题:
我使用具有这两个功能的控制器:
两个函数都有自己的路由@see routing
public function indexAction(Request $request)
{
$searchForm = $this->getSearchForm();
$searchForm->handleRequest($request);
**$data** = $searchForm->getData();
if($searchForm->isValid()){
if(!$data['birthdate'] && !$data['birthyear'] && !$data['patientID'] && !$data['patientNO']){
$searchForm->addError(new FormError("Please specify at least one search parameter."));
}
else
{
return $this->forward('GeneralCommonBundle:DataHome:result', array(
'limit' => '20',
'offset' => '0'
));
//return $this->redirect($this->generateUrl('result', array('limit' => '20', 'offset' => '0')));
}
}
. . . . .
}
public function resultAction(Request $request, $limit, $offset){
$repo = $this->getDoctrine()->getManager()->getRepository('DataLiveBundle:DataAPatient');
$qb = $repo->getFindingPatientQuery($data['birthdate'],
$data['patientID'],$data['birthyear'] ,$data['patientNO'], $data['center'], $data['registry'] ,$data['study']);
$total = $repo->countQueryResults($qb);
$qb = $repo->addLimitToQuery($qb, $limit, $offset);
$paginationOptions = array(
'total' => $total,
'limit' => $limit,
'offset' => $offset
);
//$query = $qb->getQuery();
$entities = $repo->getResults($qb);
return $this->render('GeneralCommonBundle:DataHome:show.html.twig', array(
'records'=> $entities,
'isNew' => false,
'paginationOptions' => $paginationOptions,
'newrecord' => false,
'birthdate'=> $data['birthdate'],
'patientID'=> $data['patientID'],
'birthyear'=> $data['birthyear'],
'patientNO'=> $data['patientNO'],
'center' => $data['center'],
'registry' => $data['registry'],
'study' => $data['study']
));
}
在函数 indexAction 中,我应该转到下一个函数 (resultAction),因为我需要一个新的 URL。我还需要 Array $data ,它是 generated 在函数 indexAction 中,在函数 resultAction 中,但我不知道,我如何可以使用数组作为参数调用路由。
路由文件看起来是这样的:
dataHome:
pattern: /home
defaults: { _controller: "GeneralCommonBundle:DataHome:index"}
result:
pattern: /{limit}/{offset}/result
defaults: { _controller: "GeneralCommonBundle:DataHome:result", limit: 20, offset: 0 }
我尝试使用全局变量(我知道这不是一个很好的范例),因为函数在同一个控制器中,但它不起作用。我也尝试将 $data 数组放入响应中..但它也不起作用..
如何使用数组作为参数调用路由? 或者临时存储这个数组,转发后我可以使用它?
感谢您的支持!!
你当然可以在路由中作为参数发送,这是我的快速测试:
public function testAction()
{
$testArray = [
'data1' => 'data',
'data2' => 'data'
];
return $this->forward('App\Controller\TestController::otherAction', [
'data' => serialize($testArray)
]);
}
public function otherAction($data)
{
$data = unserialize($data);
return new JsonResponse($data);
}
但是请记住,GET 对字符串长度有一些限制,我认为使用会话变量会更合适,只需在 indexAction 中设置序列化数据,然后在 resultAction 中获取它