簡體   English   中英

Symfony:在其他函數中使用路由參數

[英]Symfony: use parameter from route in other function

我的控制器:

**
 * @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}),以便在這里也可以在查詢中使用該特定值。

我也嘗試在該函數上使用@route批注,但沒有結果,並且$request->query...也無濟於事。

如果我正確理解了您的問題,我要做的是在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() {
               //
            }
        });
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM