2016-06-21 6 views
0

Dies ist meine Situation: Ich bin mit Symfony und Bootstrap, und ich habe dieses Eingabetextfeld:Wie wird eine Eingabe als Parameter an eine Route gesendet? Symfony-Bootstrap

<div class="col-xs-3"> 
    <input type="text" class="form-control" id="amount" placeholder="Max amount"> 
</div> 

Was ich tun möchte, ist senden, was die Person in diesem Bereich als schreibt Parameter zu dieser Route:

<a href="{{ path('_filtered') }}" class="btn bg-danger">Filter</a> 

Wie kann ich das tun? Ich habe versucht, dies zu tun:

<a href="{{ path('_filtered', {'parameter': amount}) }}" class="btn bg-danger">Filter</a> 

Menge ist die Eingabe-ID. Aber es funktioniert nicht, und nachdem ich stundenlang gesucht habe, konnte ich keine Lösung finden, so dass jede Hilfe geschätzt wird! Vielen Dank.

Update: HTML:

{% extends '::base.html.twig' %} 


{% block panelhead %} 
Publicaciones<br> 
{% if is_granted('ROLE_USER') %} 
    <a href="{{ path('_altaPubli') }}" class="btn btn-primary">Agregar Publicacion</a> 
    <div class="col-xs-3"> 
     <input type="text" class="form-control" id="cantidad" placeholder="Maximo personas"> 
    </div> 
    <div class="col-xs-3"> 
     <input type="text" class="form-control" id="coste" placeholder="Maximo coste"> 
    </div> 
    <div class="form-group"> 
     <label for="sel1">Pais:</label> 
     <select class="selectpicker" id="sel1"> 
    {% for publicacion in publicaciones %} 
      <option>publicacion.pais</option> 
    {% endfor %} 
     </select> 
     <label for="sel2">Provincia:</label> 
     <select class="selectpicker"> 
    {% for publicacion in publicaciones %} 
      <option>publicacion.provincia</option> 
    {% endfor %} 
     </select> 
     <label for="sel3">Localidad:</label> 
     <select class="selectpicker"> 
      {% for publicacion in publicaciones %} 
      <option>publicacion.localidad</option> 
      {% endfor %} 
     </select> 
    </div> 
{% endif %} 
<a href="{{ path('_filtradas') }}" class="btn bg-danger" id="2">Filtrar</a> 
<script> 
    $(document).ready(function() { 
     $('#cantidad').click(function() { 
      var inputData= $('#cantidad').val(); 
      $.ajax({ 
       type: 'GET', 
       url: "{{path('_filtradas')}}", 
       data: { 
        'inputData': inputData, 
       }, 
      }); 
     }); 
    }); 
</script> 
{% endblock %} 

{% block panelbody %} 
<tbody> 
<div class="row-fluid"> 
    {% for publicacion in publicaciones %} 

     <div class="col-md-4"> 
      <div class="mark-pers"> 
       <div class="text-center"> 
        <div> 
         <img src="{{ asset('uploads/fotos/' ~ publicacion.path) }}" width="240" height="160"/> 
        </div> 

        {{ publicacion.usuario }} 
        <a href="{{ path('_mostrarPublicacion', {'id': publicacion.id}) }}">{{ publicacion.descripcion }}</a></td> 
        {% if is_granted('ROLE_USER') %} 

         {% if publicacion.usuario.id == user.id %} 
          <a href="{{ path('_modificarPublicacion', {'id': publicacion.id}) }}" class="glyphicon glyphicon-edit"></a> 
         {% endif %} 
         {% if publicacion.usuario.id == user.id or is_granted('ROLE_ADMIN') %} 
          <a href="{{ path('_eliminarPublicacion', {'id': publicacion.id}) }}" class="glyphicon glyphicon-erase"></a> 
         {% endif %} 
         <br/> 
        {% endif %} 
       </div> 
      </div> 
     </div> 

    {% endfor %} 
</div> 
</tbody> 
{#</table>#} 
{% endblock %} 

Controller:

/** 
* Lists all Publicacion entities. 
* @Route("/home/publicacionesFiltradas", name="_filtradas") 
*/ 
public function filtrar(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $publicaciones = $em->getRepository('AppBundle:Publicacion')->findAll(); 
    $inputData = $request->get('inputData'); 
    dump($inputData); 
    return $this->render(':default/publicacion:publicacionesFiltradas.html.twig', array(
     'publicaciones' => $publicaciones, 
     'user' => $this->getUser(), 
     'cantidad' => $inputData, 
    )); 
} 

Antwort

0

ich so etwas tun würde:

$(document).ready(function(){ 
// Get your data to be sent as a parameter 
var inputData= $('#amount').val(); 

    $.ajax({ 
      type: 'POST', // It can either be POST or GET depending on what you want to do. 
      url: "{{path('_filtered')}}", 
      data: { 
       'inputData': $inputData,    
      }, 
      success: function(msg){ 
      // Perform your actions here. 
      }, 

     }); 

});

und in der Steuerung würde ich diese Daten erhalten:

$inputData = $request->get('inputData'); 

Hoffe, es hilft!

+0

Übrigens sollte der Code, wo Sie die Daten erhalten, innerhalb eines Ereignisses sein. $ ('# Menge) .click (function() {// hole Daten hier}): –

+0

Es war eine große Hilfe, vielen Dank, aber ich habe das Problem, dass nach $ inputData = $ Anfrage-> get ('Eingabedaten'); $ inputData hat einen Nullwert. Irgendwelche Ideen? – Gand

+0

Können Sie den Code des Controllers sowie die Ansicht veröffentlichen? –

0

Sie können dies nicht ohne Front-End-Manipulationen:

Zuerst Server gibt den Code/template/Seite so, wie Sie es codiert haben, und nur dann eintritt Benutzer etwas in dem Eingabefeld ein. Zu diesem Zeitpunkt ist nur eine Front-End/Browser-Handhabung möglich, was im Grunde JavaScript ist.

So haben Sie ein Ereignis erstellen, die nach dem Feld aussehen wird und wenn etwas eingegeben wird, geben sie dir Taste href ...

Also, versuchen Sie es nicht in der Vorlage zu codieren mit PHP/HTML. Verwenden Sie das Skript, das nach dem Laden der Seite funktioniert. Siehe Gerardo Soriano Antwort für ein Beispiel.

0

In Ihrem Fall glaube ich, dass der Funktionsklick nicht Ihren Bedürfnissen entspricht. Versuchen Sie folgendes: $ ('# cantidad'). Focusout (function() {// Alles bleibt gleich}); Ich denke, dass der Fokus aufgerufen wird, nachdem ein Benutzer einige Daten eingegeben und irgendwo anders geklickt hat. Lassen Sie mich wissen, wenn es funktioniert

+0

Immer noch das Gleiche. Und der Fokusout-Teil sagt: "Ungelöste Funktion oder Methodenfokussierung()" – Gand