2016-01-20 101 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"); 
    //.. 
}