2017-05-21 8 views
0

マイコントローラ:symfonyのその他の機能の経路から使用パラメータ

** 
* @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を使用して、ルート(タイトル/ {タイトル})からの値に基づいて、いくつかの結果を表示します(一部のDB呼び出しの助けを借りて)where句)。このページでは、2つのフィルタを使用して、ページに表示される結果をフィルタリングすることができます。フィルタがトリガされると(値が選択されたとき)、私はupdateDataAction関数のAJAXコールを実行して、特定のDBコールを再度実行しますが、余分なwhere句とフィルタを値として使用します。私は、AJAX呼び出しにJSONの応答でフィルタリングされた結果セットを返します。成功すると、元の値にいくつかのinterHTMLの置き換えが行われます。

私の質問は次のとおりです。ルート(title/{title})から同じ値{title}を渡したり使用したりするにはどうすればよいですか。

この機能でも@route注釈を使用しようとしましたが、結果がなく、$request->query...も役に立ちませんでした。

+0

あなたのJSにあなたが持っている '成功:関数は、(結果は){'が、その後result.low'と '' result.result.low'を参照してください - 私はこれがちょうどあなたが間違った変数名であなたのコードの実際のエラーではなく、質問から除外したいくつかのコードのためだと仮定しますか? – duncan

+0

これは正しい – Rafie

答えて

0

私があなたの質問を正しく理解していれば、AJAXリクエストを行うときにあなたのJSで読むことができるHTML属性に{{results.title}}があります。

次に、あなたのJSで

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

$("#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() { 
       // 
      } 
     }); 
    } 
}); 
関連する問題