Symfony:在其他函数中使用路由参数

时间:2017-05-21 17:27:59

标签: javascript php jquery ajax symfony

我的控制器:

Supervisor.supervise_processes([pid1,pid2,...,pidn],strategy: :simple_one_for_one)

我在script.js中的AJAX调用:

**
 * @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]));
}

我的树枝: 过滤器:

$(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>

有点背景信息:使用TitleAction函数,我会在twig页面上显示一些基于路径值(title / {title})的结果 - 借助一些数据库调用({{1} }子句)。在这个页面上,我有2个过滤器,您可以使用它们来过滤页面上显示的结果。当触发过滤器(选择值)时,我对updateDataAction函数进行AJAX调用,在那里我再次执行一些特定的DB调用,但是使用额外的{% if results.low != 0 %} <p class="amount" id="low">{{ results.low|round(0, 'floor') }}</p> {% else %} <p class="amount">N/A</p> {% endif %} 子句并将过滤器作为值。我返回过滤结果集,JSON响应我的AJAX调用。在成功的过程中,我对原始值进行了一些interHTML替换。

我的问题如下。如何从路径(title / {title})传递或使用相同的值{title},这样我也可以在查询中使用该特定值。

我尝试在该函数上使用where注释,但没有结果,where也没有帮助。

1 个答案:

答案 0 :(得分:0)

如果我已正确理解您的问题,我要做的是在HTML属性中使用<a>text</a>,您可以在制作AJAX请求时使用JS阅读。

e.g。

{{results.title}}

然后在你的JS中:

<body data-title="{{results.title}}">