我无法在控制器中恢复复选框的值

时间:2019-04-08 17:07:59

标签: forms symfony checkbox

我正在做一个symfony项目,我在树枝上创建了一个复选框,我想在我的Controller中获取检查值,但是我仍然得到一个null,我不知道问题出在哪里,请帮忙:

我的动作:

public function sendSmsAction(Request $request) {
    if ($request->isMethod('get')) {
        $ids = $request->query->get('id');
        var_dump($ids);
        die();
    }

    return $this->render('CeUtilisateurBundle:Utilisateur:sms.html.twig') 
}

我在树枝上的表格:

<form 
    method="GET" 
    action="{{path('ce_utilisateur_send_sms') }}" 
    id="lbad_form_sms" 
    name="users"
>
    {% if listUsers is not empty %}
        {% for usr in listUsers %}

            <input 
                id="userchecked" 
                name="{{usr.id}}" 
                type="checkbox" 
                value="{{ usr.telephone }}"
            />

            <span>{{ usr.username }}</span>
</form>

2 个答案:

答案 0 :(得分:1)

除了示例中的其他问题之外,为了获取这些值,您需要更改显示复选框的HTML部分,并为其赋予不同的ID,正确的值和相同的名称:

<input id="telephone{{ usr.id }}" name="telephone[]" type="checkbox" value="{{ usr.telephone }}"/> 

请注意,name属性对于每个复选框都是相同的,并且在末尾具有[]-这允许为一个属性传递多个值。

接下来,我建议使用POST请求提交表单,而不要使用您正在使用的GET。如果这样做,您可以像这样在控制器中获取选定的电话号码:

$telephones = $request->request->get('telephone');

如果要通过GET请求提交表单,请使用query而不是request

$telephones = $request->query->get('telephone');

答案 1 :(得分:0)

首先,您在iffor的树枝中缺少结束标记,但是我认为它们只是在复制过程中丢失了。

第二,为所有输入元素赋予相同的ID“ userchecked”。每个HTML元素应具有唯一的ID,例如通过添加您的用户ID。

name属性也会发生类似的情况。如果为多个表单元素提供相同的名称,则仅提交最后一个表单元素。

因此您的表单应如下所示:

<form 
    method="GET" 
    action="{{path('ce_utilisateur_send_sms') }}" 
    id="lbad_form_sms" 
    name="users"
>
    {% if listUsers is not empty %}
        {% for usr in listUsers %}
            <input 
                id="{{"userchecked_" ~ usr.id}}"
                name="{{"checked_" ~ usr.id}}"
                type="checkbox" 
                value="{{ usr.telephone }}"
            />

            <span>{{ usr.username }}</span>
        {% endfor %}
    {% endif %}

    <input type="submit" value="Envoyer un sms!"/>
</form>

要修复控制器,您必须通过名称字段获取输入。由于它是动态创建的,因此最简单的方法是仅获取所有参数并对其进行循环。

public function sendSmsAction(Request $request) {
    if ($request->isMethod('get')) {
        $parameters = $request->query->all();
        foreach ($parameters as $name => $value) {
            var_dump("$name: $value");
        }
        die();
    }

    return $this->render('CeUtilisateurBundle:Utilisateur:sms.html.twig') 
}

请注意,空白复选框不会提交任何参数。