Zum Inhalt springen

Frontend Formular speichert Checkbox nicht

Erstellt am 1. Juli 2011 · 3 Antworten · letzte Antwort am 5. Juli 2011

Tags: Fluid, Frage

Unbekannter Benutzer ·

Hi,

(ich arbeite mit extbase 1.0.2 und fluid 1.0.2)

ich hab ein Formular fürs Frontend, welches unter anderem eine Checkbox enthält:

<h3>Edit Settings</h3>
<f:if condition="{customer}">
	<f:then>
		<f:form action="update" controller="Customer" method="post" name="customer" object="{customer}">
			<label>Freischaltcode</label><br/>
			<f:form.textbox property="activationcodeId"/>
			<br/><br/>
			<label>Newsletter</label>
			<f:form.checkbox property="newsletter" checked="{customer.newsletter} == 1"/>
			<br/><br/>
			<f:form.submit value="Abschicken" name="submit"/>
		</f:form>
	</f:then>
</f:if>

updateAction Funktion im Controller sieht so aus:

<?php
/**
 * 
 * Updates an existing customer
 *
 * @param Tx_MyExt_Domain_Model_Customer $customer
 * 
 * @return void
 */
public function updateAction(Tx_VvsBonusbereich_Domain_Model_Customer $customer) {
	if($this->accessControlService->hasLoggedInFrontendUser()) {
		$this->customerRepository->update($customer);
	}
	$this->redirect('list');
}
?>

Während beim Speichern der Wert aus dem Textfeld "activationcodeId" brav gespeichert wird, wird der Wert der Checkbox nicht übernommen. Wieso nicht? 🙁

Danke für jeden Tipp!

Eydamos ·

Bedenke, dass das Verhalten von Checkboxen sehr bescheiden ist.

Ist die Checkbox angehakt ist im GET/POST Array ein Eintrag
['newsletter'] = true

Ist die Checkbox nicht angehakt wird statt ['newsletter'] = false einfach überhaupt nichts im GET/POST Array gespeichert.

Fazit: ist die Box nicht angehakt hat das Array - und somit warscheinlich auch das Object was daraus erzeugt und an deinen Controller übergeben wird - keine Variable Namens newsletter was dazu führt, dass beim update einfach der alte Wert behalten wird.
Nur wenn der Haken drin ist hat dein Object die Variable (oder besser Eigenschaft) newsletter = true und es wird entsprechend in der Datenbank vermerkt.

Mein Tipp debugge die Variable zur sicherheit einmal und wenn es so ist wie ich es oben beschrieben hab musst du halt erst testen ob die Variable da ist und wenn nicht diese mit dem Wert false anlegen und dann updaten.