我正在做一个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>
答案 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)
首先,您在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')
}
请注意,空白复选框不会提交任何参数。