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



>我正在做一个symfony项目,我在twig中创建了一个复选框,我想在我的控制器中获取检查值,但我仍然得到一个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>

除了示例中的其他问题外,为了获取这些值,您需要更改显示复选框的 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');
首先

,您在树枝中缺少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') 
}

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

最新更新