[PHP] Symfony 4|Doctrine: Probleem met embedded en Lifecycle

Pagina: 1
Acties:

Vraag


  • Uhmmie
  • Registratie: Januari 2000
  • Laatst online: 20-08 17:30
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use ...

/**
 * @ORM\Entity(repositoryClass="App\Repository\OrganisationRepository")
 * @ORM\HasLifecycleCallbacks
 */
class Organisation
{
  
     ...

    /**
     * @ORM\Embedded(class = "Adress", columnPrefix = false)
     */
    private $adress;

     ...

    /**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function doSomethingA()
    {
        echo "<h1>A</h1>";
    }
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use ...

/**
 * @ORM\Embeddable
 * @ORM\HasLifecycleCallbacks
 */
class Adress
{
     ...

    /**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function doSomethingB()
    {
        echo "<h1>B</h1>";
    }
}


Ik vraag me af of het op een of andere manier mogelijk is om de Lifecycle callbacks in de class van de embedded fields te triggeren?
De doSomethingA wordt in de bovenstaande situatie namelijk wel uitgevoerd, maar de doSomethingB helaas niet.
Is dit op een of andere manier te realiseren?

Currently playing: MTG Arena (PC)

Alle reacties


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
HasLifecycleCallbacks werkt alleen op entity classes, dus dit zal niet van toepassing zijn op een Embeddable. Je kan hem vanuit doSomethingA() aanroepen, bijvoorbeeld:

PHP:
1
2
3
4
public function doSomethingA()
{
    $this->address->doSomethingB();
}

Acties:
  • 0 Henk 'm!

  • Uhmmie
  • Registratie: Januari 2000
  • Laatst online: 20-08 17:30
4Real schreef op vrijdag 14 september 2018 @ 09:20:
HasLifecycleCallbacks werkt alleen op entity classes, dus dit zal niet van toepassing zijn op een Embeddable. Je kan hem vanuit doSomethingA() aanroepen, bijvoorbeeld:

PHP:
1
2
3
4
public function doSomethingA()
{
    $this->address->doSomethingB();
}
Dat gaat inderdaad wel werken. Alleen jammer dat je dat dus bij elke implementatie van Adres moet herhalen. Maar dat is dan niet anders :'(.

[edit] Ik heb overigens besloten om het geheel anders op te lossen dan via Lifecyclecallbacks.

[ Voor 8% gewijzigd door Uhmmie op 18-09-2018 14:19 ]

Currently playing: MTG Arena (PC)


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Uhmmie schreef op vrijdag 14 september 2018 @ 10:26:
[...]


Dat gaat inderdaad wel werken. Alleen jammer dat je dat dus bij elke implementatie van Adres moet herhalen. Maar dat is dan niet anders :'(.
Maar waarom is Address geen entity? Worden deze zaken elders opgeslagen?

Acties:
  • 0 Henk 'm!

  • Uhmmie
  • Registratie: Januari 2000
  • Laatst online: 20-08 17:30
4Real schreef op dinsdag 18 september 2018 @ 07:41:
[...]
Maar waarom is Address geen entity? Worden deze zaken elders opgeslagen?
Door hem op deze manier te embedden zitten de gegeven van het adres gewoon in de tabel van de organisatie. Echter kan ik de getters/setters nu zo maken dat je alleen een geheel adres kan toevoegen. Ik vind persoonlijk dat code daardoor veel beter leesbaar wordt. Ik gok dat dat een kwestie van smaak is.
Ik check nu overal in de organisatie gewoon of ik een adres object heb ipv dat ik steeds moet kijken of ik een straat, huisnummer, postcode en plaats heb.

Dit is een voorbeeldje waarover ik nu aan het lezen ben.

https://io.serendipityhq....-objects-and-embeddables/

[ Voor 11% gewijzigd door Uhmmie op 18-09-2018 11:39 ]

Currently playing: MTG Arena (PC)