Symfony:在其他功能中使用路由中的参数
Posted
技术标签:
【中文标题】Symfony:在其他功能中使用路由中的参数【英文标题】:Symfony: use parameter from route in other function 【发布时间】:2017-05-21 17:27:59 【问题描述】:我的控制器:
**
* @Route("/", name="homepage")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexAction(Request $request)
return $this->render('default/index.html.twig');
/**
* @Route("/title/title", name="Title")
* @param Request $request
* @param $title
* @return \Symfony\Component\HttpFoundation\Response
*/
public function TitleAction(Request $request, $title)
//Some DB calls to retrieve data with 'where .. = $title'
return $this->render('default/title.html.twig', array(
'title' => $title,
'results' => $results[0],
'cs' => $cs,
'gs' => $gs,
...
/**
* @param Request $request
* @return JsonResponse
*/
public function updateDataAction(Request $request)
//Here I also want to use $title so I can use it in my query
$dataCS = $request->get('inputCS');
$dataGS = $request->get('inputGS');
if(!empty($dataGS) and !empty($dataCS))
// $results = Query
else
// $results = Query
return new JsonResponse(array('results' => $results[0]));
我在 script.js 中的 AJAX 调用:
$(document).ready(function ()
$("#filter1").change(function()
var inputCS = $(this).val();
if(inputCs.length >= 1)
var data = inputCS: inputCS;
$.ajax(
type: "POST",
url: ROOT_URL + "default/update/data",
data: data,
dataType: 'json',
timeout: 3000,
success: function(results)
//some innerHTML replacements
if(result.low === null)
document.getElementById("low").innerHTML = 'N/A'
else
document.getElementById("low").innerHTML =
Math.floor(Number(result.result.low));
,
error: function()
//
)
);
)
我的树枝: 过滤器:
<select id="filter1">
<option selected disabled>Choose</option>
% for c in cs %
<option value=" c.name "> c.name </option>
% endfor %
</select>
<select id="filter2">
<option selected disabled>Choose</option>
% for g in gs %
<option value=" g.name "> g.name </option>
% endfor %
</select>
使用结果的地方:
% if results.low != 0 %
<p class="amount" id="low"> results.low|round(0, 'floor') </p>
% else %
<p class="amount">N/A</p>
% endif %
一点背景信息:使用 TitleAction 函数,我在树枝页面上显示了一些基于路由值 (title/title) 的结果 - 在一些 DB 调用的帮助下(使用 where
子句)。在此页面上,我有 2 个过滤器,您可以使用它们来过滤页面上显示的结果。当触发过滤器(选择值)时,我对 updateDataAction 函数执行 AJAX 调用,在该函数中我再次执行一些特定的 DB 调用,但使用额外的 where
子句和过滤器作为值。我返回过滤后的结果集,并以 JSON 响应我的 AJAX 调用。成功后,我对原始值进行了一些 interHTML 替换。
我的问题如下。如何传递或使用路由 (title/title) 中的相同值 title,这样我也可以在查询中使用该特定值。
我也尝试在该函数上使用@route
注释,但没有结果,$request->query...
也没有帮助。
【问题讨论】:
在您的 JS 中,您有success: function(results)
,但随后请参阅 result.low
和 result.result.low
- 我认为这只是由于您在问题中遗漏了一些代码,而不是实际错误你的代码变量名错误?
没错
【参考方案1】:
如果我正确理解了您的问题,我会在 HTML 属性中添加 results.title
,您可以在发出 AJAX 请求时使用 JS 读取该属性。
例如
<body data-title="results.title">
然后在你的 JS 中:
$("#filter1").change(function()
var inputCS = $(this).val();
var title = $('body').data('title');
if(inputCs.length >= 1)
var data =
inputCS: inputCS,
title: title
;
$.ajax(
type: "POST",
url: ROOT_URL + "default/update/data",
data: data,
dataType: 'json',
timeout: 3000,
success: function(results)
// ...
,
error: function()
//
);
);
【讨论】:
以上是关于Symfony:在其他功能中使用路由中的参数的主要内容,如果未能解决你的问题,请参考以下文章
在 Symfony 3 中从控制器传递参数以形成 __construct 类型
在 Symfony 中,如果路由匹配,是不是可以转发到其他路由
Symfony2:列出虚拟文件夹(Netbeans)中的所有视图/路由文件