2016-01-20 104 views
1

我想获取复选框的值(选中或不选),但checkedbox不会添加到表单类型中。这是一个例子获取symfony中复选框的值

<input type="checkbox" class="checkbox" id="smsflash"> 

我问是否有可能获得控制器中的checkedbox的值或不是,以及如何?

+0

如果我正确理解此checbox不是窗体的一部分,并且您手动呈现它。这有什么原因吗?你可以从'$ _GET'或'$ _POST'这样的全局变量中得到结果。 – honzalilak

+0

事实上,你正确理解我的意思,我想要得到这个复选框的价值beaucause当它被检查时,我应该得到其他领域的价值,这是表格的一部分 –

+0

然后,我会考虑使复选框的一部分整个形式。 – honzalilak

回答

2

它可能是一个有点晚了,但我的经验可能涉及您的问题,或可以帮助别人带一个类似的问题。

在我的情况下,复选框被添加到FormType,但会呈现相同的我想象如果添加到FormType之外。

我正在使用表单处理REST API请求,并且该复选框是其中一个字段。表单提交后,标题包含'Content-Type': 'application/x-www-form-urlencoded',因此我可以使用Symfony表单处理它。

问题在于表单值是作为字符串提交的(包括复选框值)。在Symfony方面,它期望如果checkbox属性存在 - 这是一个'truthy'值,如果它不存在,复选框为false。然而,因为复选框的值可以通过API表单作为字符串“false”提交 - 这相当于真实 - 因此无论复选框是否被选中,该值始终为真。

的一种方法来处理这种(但可能限制重新使用FormType的)是改变从窗体生成器“复选框”到“文本”的复选框类型:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('my_checkbox', 'text', array('error_bubbling' => true,'required' => false)) 
     ... 

然后,处理的形式(并获取复选框的值)

$form = $this->createForm(new MyFormType(), $myObject); 
$form->handleRequest($request); 

if($form->isValid()) { 
    $data = $form->getData(); 
    if($data->getMyCheckbox() === "false") { 
     $myObject->setMyCheckbox(false); 
    } else { 
     $myObject->setMyCheckbox(true); 
    } 
    ... 
3

集名称输入

<input type="checkbox" class="checkbox" id="smsflash" name="button_name"> 

,然后在控制器

use Symfony\Component\HttpFoundation\Request; 
//.. 
public function exampleAction(Request $request, $id){ 
    //.. 
    $inputValue = $request->get("button_name"); 
    //.. 
}