---
title: "Problem mit PersistenceManager"
url: "https://www.typo3.net/d/118682-problem-mit-persistencemanager"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage"]
created: "2014-08-18"
last_reply: "2014-08-19"
replies: 13
solved: false
page: 1
pages: 1
lang: "de"
---

# Problem mit PersistenceManager

Extensions › Extbase · 13 Antworten · gestartet 2014-08-18

## Eröffnungsbeitrag

**sixx24** · 2014-08-18 · [Beitrag #1](https://www.typo3.net/d/118682-problem-mit-persistencemanager/1)

Hallo zusammen,

ich habe mich drangemacht eine alte 4.5 Extension auf 6.2 upzudaten. Soweit so gut. Es handelt sich um eine Extension in der man im FE bestimmte Datensätze anlegen und verändern kann.
Ich bin allerdings noch kein Typo3 Extbase Experte...

Problem ist nun das ich beim abspeichern eines Datensatzes im FE (editAction update auf das repository) folgende Exception bekomme:
**"The object of type "VENDORXYZ\EXTNAMEXYZ\Domain\Model\Box" given to update must be persisted already, but is new"**

Im PersistenceManager gebe ich mir mal die persistenceSession aus - und dort fehlt mein Model
Wenn ich diese Seite allerdings mit F5 refreshe geht er ohne Exception weiter und hat meine Box gespeichert.

Irgendein Anhaltspunkt wo ich mit der Suche anfangen soll. Was ich wo vergessen haben könnte? :)

Vielen Dank

## Antworten

### [#2](https://www.typo3.net/d/118682-problem-mit-persistencemanager/2) · denyo256 · 2014-08-18

Wie sieht denn deine entsprechende Action aus?

### [#3](https://www.typo3.net/d/118682-problem-mit-persistencemanager/3) · sixx24 · 2014-08-18

Also meine editAction sieht so aus: (hab schon einges unwichtige rausgeworfen)

```php
public function editAction() {
	$box = NULL;
		
	if ($this->request->hasArgument('box')) {
		$uid = $this->request->getArgument('box');
		if (is_array($uid)) {
			$uidFromArray = $uid['__identity'];
			$uid = $uidFromArray;
		}
		$box = $this->boxRepository->getBox($uid);
		
	} else {
		$this->redirect('managerView');
	}
	
	if ($this->request->hasArgument('save-form')) {
		$this->boxRepository->update($box);
		$this->persistenceManager->persistAll();		
		$this->redirect('managerView');
	}

	$this->boxRepository->storeBoxToSession($box, $box->getUid());

	$this->view->assignMultiple(array(
		'box' => $box,
		'defaultLanguages' => $defaultLanguages,
		'links' => $this->explodeLinks($box),
		'errors' => $this->errors,
		'maxFileSize' => $this->settings['imageConf']['maxSize'],
		'settings' => $this->settings
	));
}
```

### [#4](https://www.typo3.net/d/118682-problem-mit-persistencemanager/4) · denyo256 · 2014-08-18

Kommen den die Argumente 'box' und 'save-form' in einem Formular zur gleichen Zeit vor? Ansonsten ist nämlich beim update wirklich kein Objekt vom Typ Box vorhanden

### [#5](https://www.typo3.net/d/118682-problem-mit-persistencemanager/5) · sixx24 · 2014-08-18

Ja ich komme erst in die

```php
if ($this->request->hasArgument('box')) {
```

Bedingung und danach in die

```php
if ($this->request->hasArgument('save-form')) {
```

Ich kann mir ja sogar die $box ausgeben. Auch direkt bevor die Exception kommt.

Und wenn ich mir kurz vor der Exception die persistenceSession ausgeben lasse ist mein Objekt nicht drin. Drücke ich F5 lade die Seite der Excpetion also neu ist das Objekt drin und er speichert.

### [#6](https://www.typo3.net/d/118682-problem-mit-persistencemanager/6) · sixx24 · 2014-08-18

Das boxRepository erzeuge ich so:

```php
	/**
	 * boxRepository
	 *
	 * @var \VENDORXYZ\EXTENSIONXYZ\Domain\Repository\BoxRepository
	 * @inject
	 */
	protected $boxRepository;
```

Muss ich das Domain\Model\Box auch noch irgendwie dem PersistenceManager bekannt machen?

### [#7](https://www.typo3.net/d/118682-problem-mit-persistencemanager/7) · sixx24 · 2014-08-18

Also es muss irgendwie an der Form und dem abschicken liegen. Denn ich habe auch noch eine Action um eine Box zu deaktivieren/aktivieren. Die sieht so aus:

```php
	/**
	 * activates an box for public
	 *
	 * @return void
	 */
	public function activateBoxAction() {

		$box = NULL;
		if ($this->request->hasArgument('box')) {
			$uid = $this->request->getArgument('box');
			if (is_array($uid)) {
				$uidFromArray = $uid['__identity'];
				$uid = $uidFromArray;
			}
			$box = $this->boxRepository->getBox($uid);
		} else {
			$this->redirect('managerView');
		}

			// check permission
		if ($box->getFrontendUserUid() != $this->frontendUser->getUid()) {
			$this->forward('noAccess');
		}

		$box->setHidden(FALSE);
		$box->setCrdate(new \DateTime());
		$this->boxRepository->update($box);				
		$this->persistenceManager->persistAll();
		$this->redirect('managerView');
	}
```

Und das funktioniert - ohne Exception. :(

### [#8](https://www.typo3.net/d/118682-problem-mit-persistencemanager/8) · denyo256 · 2014-08-18

Eventuell hilft eine Verschachtelung der Bedingungen?

```php
public function editAction() {
	$box = NULL;
 
	if ($this->request->hasArgument('box')) {
		$uid = $this->request->getArgument('box');
		if (is_array($uid)) {
			$uidFromArray = $uid['__identity'];
			$uid = $uidFromArray;
		}
		$box = $this->boxRepository->getBox($uid);
 
	        if ($this->request->hasArgument('save-form')) {
		        $this->boxRepository->update($box);
		        $this->persistenceManager->persistAll();		
		        $this->redirect('managerView');
	        }

	} else {
		$this->redirect('managerView');
	}
 
 
	$this->boxRepository->storeBoxToSession($box, $box->getUid());
 
	$this->view->assignMultiple(array(
		'box' => $box,
		'defaultLanguages' => $defaultLanguages,
		'links' => $this->explodeLinks($box),
		'errors' => $this->errors,
		'maxFileSize' => $this->settings['imageConf']['maxSize'],
		'settings' => $this->settings
	));
}
```

Dazu hat sich der Aufruf von persistAll() in 6.2 geändert, das sollte jetzt so passieren:

```php
$this->objectManager->get('TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface')->persistAll();
```

Mit deinem redirect dürfte das aber keinen Unterschied machen.

### [#9](https://www.typo3.net/d/118682-problem-mit-persistencemanager/9) · sixx24 · 2014-08-18

Die Verschachtelung macht leider keinen Unterschied. :(

Das peristAll() kommt von dem hier:

```php
	/**
	 * persistence manager
	 *
	 * @var \TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
	 * @inject
	 */
	protected $persistenceManager;
```

das sollte doch 6.2 sein oder?

### [#10](https://www.typo3.net/d/118682-problem-mit-persistencemanager/10) · sixx24 · 2014-08-18

Und nochwas: wenn ich einfach folgendes aufrufe wenn ich das erste mal in die EditView komme

```php
$box->setTitle('debug');
$this->boxRepository->update($box);
$this->persistenceManager->persistAll();
```

Wird das Object upgedatet. Das Object scheint irgendwie verloren zu gehen wenn ich den submit Button meiner EditForm betätige...

### [#11](https://www.typo3.net/d/118682-problem-mit-persistencemanager/11) · sixx24 · 2014-08-18

hmm sehr sehr seltsam. Das funktioniert auch nicht bei jedemmal. Ich werd noch verrückt...

Bei jedem 2ten mal klappts. Beim 1sten Aufruf -> Exception. Weiterer aufruf Object wird gespeichert.

### [#12](https://www.typo3.net/d/118682-problem-mit-persistencemanager/12) · sixx24 · 2014-08-18

HA!
Also ich weiß jetzt das es an folgender Zeile in meiner editAction liegt:

```php
$this->boxRepository->storeBoxToSession($box, $box->getUid());
```

Wenn ich die auskommentiere funktioniert es wunderbar. Anscheinend wird das Object aus der persistenceSession geworfen wenn ich es in eine User Session schreibe. Wieso auch immer. Da muss ich noch weiter forschen!

### [#13](https://www.typo3.net/d/118682-problem-mit-persistencemanager/13) · denyo256 · 2014-08-19

Wie lässt du dir denn die persistenceSession ausgeben? Ich habe ein ähnliches Problem mit leeren Einträgen in der Datenbank.

### [#14](https://www.typo3.net/d/118682-problem-mit-persistencemanager/14) · sixx24 · 2014-08-19

Ich gebe mir in dieser Klasse:
/typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php

mit

```php
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->persistenceSession);
```

die Session aus. Aktuell habe ich das in der Funktion isNewObject gemacht.

---

Quelle: „Problem mit PersistenceManager“, typo3.net, https://www.typo3.net/d/118682-problem-mit-persistencemanager
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
