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-&gt;query... 也没有帮助。

【问题讨论】:

在您的 JS 中,您有 success: function(results),但随后请参阅 result.lowresult.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功能测试用例不包括自定义依赖注入配置参数

Symfony2:列出虚拟文件夹(Netbeans)中的所有视图/路由文件

Symfony 3.4 / routing:参数值中的Urlencoded“/”导致与路由不匹配

Symfony 树枝控制器路由