oxUser.save() Methode innerhalb eines try/catch-Blocks?

Angenommen folgende Methode:

private function myMethod(string $sbirthDay, string $sEmail): void
{
	$oUser = oxNew(User::class);
	$sUserId = $oUser->getIdByUserName($sEmail);
		if($sUserId){
			if ($oUser->load($sUserId)) {
				$oUser->oxuser__oxbirthdate = new oxField($sbirthDay);
				$oUser->save();
			}
		}
}

Sollte man

$oUser->oxuser__oxbirthdate = new oxField($sbirthDay);
$oUser->save();

Innerhalb eines try/catch-Blocks aufrufen?
Wenn nicht, bitte um eine kurze Erklärung

in einem vanilla Shop kann save() eine Exception werfen, wenn OXID denkt, dass es ein vorhandener Datensatz aktualisiert, das oxUser Objekt aber keine ID hätte.
Siehe protected function _update() im BaseModel.
Aber wenn das passiert, dann stimmt etwas mit der DB nicht und es wäre nichts, was der Kunde ändern oder beeinflussen könnte.

Daher würde ich sagen, dass man mit sowas if($oUser->save) schon 99% der Probleme abfangen kann.

Hast du aber einen customized Shop mit eigenen indizierten Feldern im oxUser, deren Inhalt ein Insert oder Update verhindern kann, so kann es auch in solchen Fällen zu einer Exception kommen. Da sollte man aber vor dem Speichern eigene Prüfungen implementieren, ob der zu speichrnde Inhalt auch OK ist.
In deinem konkreten Fall würde ich schon dafür sorgen wollen, dass $birtDay im passenden Format ist, weil oxbortdate in der DB ein Datum-Feld ist.

Grundsätzlich stimme ich euch zu: Exceptions fangen und behandeln ist sinnvoll.

Stelle Dir aber auch die Frage, ob der Zustand nach den behandelten Exception so ist, dass man ohne Schwierigkeiten weiterarbeiten kann. Kann der User nicht angelegt oder vollständig angepasst werden, muss das Catch dafür sorgen, dass ein Ersatz passiert. Sonst schlagen möglicherweise folgende Aktionen ebenfalls fehl, weil es keinen passenden User gibt. In diesem Fall kann es sogar sinnvoll sein, die Exception erst ziemlich spät zu fangen, um Folgeaktionen zu umgehen.

Hi DanielS:
Nur mal so:
Das gehört aber normalerweise zu einer sauberen Codierung dazu ,-)

Da stimme ich Dir komplett zu. Meine Aussage sollte notwendiges Exceptionhandling nicht obsolet machen.

Ich wollte nur betonen, dass der try-Block nicht zu knapp ausfallen sollte und man auch den Code nach dem Exceptionwerfer im Blick haben muss.

try {
  $user->save();
} catch ...

könnte zu wenig sein. Die Herausforderung durch das Modulkonzept ist, dass man nicht unbedingt weiß, was nach dem eigenen Code noch ausgeführt wird.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.