>我正在做一个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');
,您在树枝中缺少if
和for
的结束标签,但我认为它们只是在复制过程中丢失了。
其次,为所有输入元素提供相同的 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')
}
请注意,空复选框不会提交参数。