如何将输入作为参数发送到路由? Symfony的自举

时间:2016-06-21 01:03:06

标签: twitter-bootstrap symfony input parameters routes

这是我的情况:我使用Symfony和Bootstrap,我有这个输入文本字段:

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

我想要做的是将该人在该字段中写的内容作为参数发送到此路线:

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

我该怎么做?我试过这样做:

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

金额是输入ID。但它不起作用,经过几个小时的寻找,我无法找到解决方案,所以任何帮助都将受到赞赏!谢谢。

更新: 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 %}

控制器:

    /**
 * 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,
    ));
}

3 个答案:

答案 0 :(得分:0)

我会做这样的事情:

$(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. 
          },

        });

});

在控制器中我会得到那些数据:

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

希望它有所帮助!

答案 1 :(得分:0)

你不能在没有前端操作的情况下这样做:

首先,服务器按照您编码的方式输出您的代码/模板/页面,然后只有用户在输入字段中输入内容。目前只能进行前端/浏览器处理,基本上是JavaScript。

所以你必须创建一个事件,它将关注该字段并输入一些内容,将其传递给你的按钮,href ...

因此,不要尝试使用php / html在模板中对其进行编码。使用脚本,在加载页面后将起作用。有关示例,请参阅 Gerardo Soriano 答案。

答案 2 :(得分:0)

在您的情况下,我认为功能点击不符合您的需求。试试这个: $('#cantidad')。focusout(function(){//一切都保持不变}); 我认为,在用户输入一些数据并在其他地方点击之后,将调用焦点。 让我知道它是否有效