Задаването на булева невярна стойност над REST API работи само в JSON

Използвам FOSRestBundle и стандартни функционалности на формуляр Symfony2, за да създам REST API.

Имам дефиниция на формуляр като тази:

$builder->add('paid', 'checkbox', array(
    'required' => false,
))

Чрез изпращане на данни през REST API във формат JSON с PATCH заявка мога успешно да превключвам данните между true и false:

{
    "paid": true
}

съответно

{
    "paid": false
}

Ако обаче данните се изпращат като application/x-www-form-urlencoded, тогава мога да задам данните само на true, а не на false.

Това работи: paid=1 - запис с paid=false е зададен на paid=true.
Това се игнорира: paid=0 - запис с paid=true остава paid=true.

Вече обмислях да използвам тип избор вместо квадратче за отметка (което работи при тестово изпълнение), но това изглежда не е правилният начин.

Какво мога да опитам, за да работи правилно?


person sprain    schedule 29.11.2013    source източник
comment
намери ли някакво решение?   -  person Oliboy50    schedule 28.05.2016


Отговори (2)


трябва да използвате обратно извикване, за да проверите дали квадратчето за отметка не е отметнато и да го зададете на false. Мисля, че имате стойност по подразбиране като true. Можете ли да публикувате своя обект?

person Amine    schedule 29.11.2013
comment
Стойността по подразбиране е false. Ако квадратчето за отметка не е поставено, не искам да бъде зададено на false, а да бъде игнорирано. - person sprain; 29.11.2013

използвайте ChoiceType вместо поле за отметка

->add('notificationNews', ChoiceType::class, array(
    'choices' => array(
        '0' => false,
        '1' => true,
        'null' => null,
     ),
     'required' => false,
))
person Seb Lev    schedule 19.04.2018