[TYPO3-german] if ($object) ist immer TRUE

Stephan Schuler Stephan.Schuler at netlogix.de
Mon Apr 27 13:38:10 CEST 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hallo zusammen.

Wenn es darum geht, jetzt sofort weitermachen zu können ist der Zusammenfassung von Jorinde wenig hinzuzufügen, ich hätte in allen Punkten ähnliches gesagt. Damit kannst Du programmieren ohne auf die Nase zu fallen.

Allerdings gibt es die Konvention, dass das Repository "ein Objekt" liefert (oder NULL wenn dieses Objekt nicht gefunden werden konnte) wenn die Methode mit "findOne" beginnt.
Du schreibst zum Beispiel einfach "$userRepository->findOneByEmail($email)".

Die "findOneBy.*"-Methoden sind im trivialen Fall mit einem Argument nicht mal selbst zu implementieren sondern "magic" des Persistence\Repository, das macht das automatisch.

Um jetzt wieder auf Dein Problem zurückzukommen:

Wenn Deine Methode "kein oder ein" Objekt liefern soll aber nie mehrere, wäre es angebracht,
* die Methode auch "findOne.*" zu nennen (optional und Geschmackssache) und
* die Implementierung dahingehend zu ändern dass der Rückgabewert dem auch entspricht (eigentlich relevanter, um den gleichen Code nicht an mehreren Stellen schreiben zu müssen).

https://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_persistence_1_1_repository.html#a6ca24d0cc830839104a34951755a1f27
https://typo3.org/api/typo3cms/extbase_2_classes_2_persistence_2_repository_8php_source.html#l00290
https://gist.github.com/anonymous/492f785e616fc065a199

Es geht dabei also im Wesentlich um die Einhaltung von Konvention:
* "findBy" findet eine beliebige Anzahl (gerne auch 0),
* "findOneBy" findet genau eines (bzw. NULL)
* darauf sollte man sich verlassen können.

Du *darfst* das natürlich nach Deinem Geschmack anders machen. Allerdings vereinfacht man sich das Leben ungemein, wenn man den eigenen Code nach den Konventionen des verwendeten Frameworks formuliert.

Gruß,



Stephan Schuler
Web-Entwickler | netlogix Media

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: media.netlogix.de




netlogix GmbH & Co. KG
IT-Services | IT-Training | Media
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt



- -----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Jorinde Milde
Gesendet: Montag, 27. April 2015 08:22
An: German TYPO3 Userlist
Betreff: Re: [TYPO3-german] if ($object) ist immer TRUE

Hallo Ralf-Rene,

ich bilde mir ein, dass ein Repository immer ein Objekt "QueryResult" zurück liefert. Dieses müsste dann darauf getestet werden, ob es leer ist. Zum Beispiel:

if ($existingLiveDialog->count() !== 0) { ...

Außerdem beinhaltet ein QueryResult Objekt und nicht nur die IDs zu diesen Objekten. Um also die ID irgendwohin zu schreiben, musst du dir diese auch erst holen:

$existingLiveDialog->getUid();

Bzw. wenn $existingLiveDialog noch ein QueryResult ist:

$existingLiveDialog->getFirst()->getUid();


Mit freundlichen Grüßen
Jorinde Milde


M.Sc. Jorinde Milde
Web Development

599media GmbH
Platz der Oktoberopfer 5
09599 Freiberg

Tel.: 03731 / 41 939 - 42
Fax: 03731 / 41 939 - 59

http://www.599media.de
jorinde.milde at 599media.de

Geschäftsführer: Jens Engelmann
Sitz der Gesellschaft: Freiberg
HR: AG Chemnitz HRB 24695

- -----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Ralf-Rene Schröder
Gesendet: Montag, 27. April 2015 02:28
An: typo3-german at lists.typo3.org
Betreff: [TYPO3-german] if ($object) ist immer TRUE

hallo...
ich habe in einer create action zwei Probleme...
vielleicht sieht ja jemand meinen Fehler ???
// meine Fragen und Probleme sind im Kommentar geschrieben


/**
* action create
* @param \Vendor\Ext\Domain\Model\LiveDialog $newLiveDialog
* @return void
*/
public function createAction(\Vendor\Ext\Domain\Model\LiveDialog
$newLiveDialog) {
  $twin = $newLiveDialog->getTwin();
  $ptwin = $newLiveDialog->getPartnertwin();
  $existingLiveDialog =
$this->liveDialogRepository->findExistingLiveDialog($twin, $ptwin);

// 1.) das folgende wird trotz if IMMER augeführt ??? warum ???
// 2.) wenn ich die 4 durch das gewollte $existingLiveDialog ersetze // bekomme ich den Fehler dass es ein Object und kein String ist ???
// ich will, wenn der Dialog schon existiert ihn nur direkt anzeigen, // andernfalls ihn und seinen PartnerDialog (vertauschte Werte) anlegen.

  if ($existingLiveDialog) {
    $this->redirect('show','LiveDialog',Null,array('liveDialog' => 4));
  }
  $this->liveDialogRepository->add($newLiveDialog);

// hier die Frage ob es keine einfachere Methode gibt // einen kreuzweise 1:1 verknüpften Datensatz zu erstellen ???
// das hier funktioniert zwar, aber irgendwie finde ich es nicht schön.

$this->persistenceManager =
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager");
$this->persistenceManager->persistAll();
  $newLivePartnerDialog = new \imF\Nr\Domain\Model\LiveDialog();
  $newLivePartnerDialog->setTwin($ptwin);
  $newLivePartnerDialog->setPartnertwin($twin);
  $newLivePartnerDialog->setPartnerDialog($newLiveDialog);
  $this->liveDialogRepository->add($newLivePartnerDialog);

$this->persistenceManager->persistAll();
  $newLiveDialog->setPartnerDialog($newLivePartnerDialog);
  $this->liveDialogRepository->update($newLiveDialog);

$this->persistenceManager->persistAll();
  $this->redirect(...);
}

_____________________________________________________________________
hier noch das genutzte Repository, liefert kein oder genau ein Ergebnis:
/**
 *
 *  @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
 */
  public function findExistingLiveDialog($twin, $ptwin) {
        $query = $this->createQuery();
        $query->matching(
            $query->logicalAnd(
                $query->equals('twin', $twin),
                $query->equals('partnertwin', $ptwin)
            )
        );
        return $query->execute();
  }



- --
image[FORMAT] - Ralf-René Schröder
http://www.image-format.eu ... Wir geben Ihrem Image das richtige Format _______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

-----BEGIN PGP SIGNATURE-----
Version: PGP Universal 3.3.2 (Build 15704)
Charset: utf-8

wpUDBQFVPh+jpp0IwsibV8MBCKrZA/9e7XPBzAPn6vPkTjJe8UCp249f7J7L80BH
G6wBQv5IHuJEHl0rNkKXfMvDv2SqXWbvzCBHW4j+1lM+PG5EJKn3v4HMN9w9lD9Z
4n41H+zD+QFD0L9GBjNQVLmtQEggxfpDDFTy/lHcfwN0W+/hr4vUld80VINHBO90
uqqCX4ow9g==
=/TIx
-----END PGP SIGNATURE-----


More information about the TYPO3-german mailing list