Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: Symfony2 - checkbox zawsze zaznaczony

Cześć,

Mam checkbox w formularzu stworzony:
$builder->add('is_active', 'checkbox', array('value'=>true ));


W kontrolerze ustawiam formularz:
$form = $this->createForm(new AddClientType());
$form->setData($user);


W modelu User, który mapuje tabelę User mam:
/**
* Set is_active
*
* @param boolean $isActive
* @return User
*/
public function setIsActive($isActive)
{
$this->is_active = $isActive;

return $this;
}

/**
* Get is_active
*
* @return boolean
*/
public function getIsActive()
{
return $this->is_active;
}


W widoku twig mam:
{{ form_widget(generalForm.is_active, {'id':'is_active'}) }}


W bazie pole jest jako tinyint i przyjmuje wartość 1 albo 0. Niestety na stronie checkbox zawsze jest zaznaczony. Nawet jeśli w bazie jest ustawione 0. Jak to poprawić?
Robert P.

Robert P. Senior PHP Developer

Temat: Symfony2 - checkbox zawsze zaznaczony

Pole jest zawsze zaznaczone ponieważ w kodzie w 3 parametrze methody add w na $builder masz

'array('value'=>true ))'


Pownieneś użyć http://symfony.com/doc/current/cookbook/form/data_tran...

Btw: zgodnie z PSR pownieneś nazwać zmienną $isActive, zamiast $is_active; taki mały hint Ten post został edytowany przez Autora dnia 20.08.15 o godzinie 11:04
Krzysztof N.

Krzysztof N. CEO. Aplikacje
internetowe i
mobilne. Symfony,
Zend.

Temat: Symfony2 - checkbox zawsze zaznaczony

Tomasz F.:
Mam checkbox w formularzu stworzony:
$builder->add('is_active', 'checkbox', array('value'=>true ));


W kontrolerze ustawiam formularz:
$form = $this->createForm(new AddClientType());
$form->setData($user);


W modelu User, który mapuje tabelę User mam:
/**
* Set is_active
*
* @param boolean $isActive
* @return User
*/
public function setIsActive($isActive)
{
$this->is_active = $isActive;

return $this;
}

/**
* Get is_active
*
* @return boolean
*/
public function getIsActive()
{
return $this->is_active;
}


W widoku twig mam:
{{ form_widget(generalForm.is_active, {'id':'is_active'}) }}


W bazie pole jest jako tinyint i przyjmuje wartość 1 albo 0. Niestety na stronie checkbox zawsze jest zaznaczony. Nawet jeśli w bazie jest ustawione 0. Jak to poprawić?
Przyczyna leży w linii
$builder->add('is_active', 'checkbox', array('value'=>true ));
a konkretnie w fragmencie
'value'=>true
Powoduje on ustawianie wartości true dla pola is_active, a więc wartość właściwości $this->is_active w encji zostanie nadpisana, zignorowana, ponieważ "na sztywno" jest ustawiona wartość true w polu formularza podczas jego budowania.

Następna dyskusja:

Sprawdzenie czy checkbox je...




Wyślij zaproszenie do