ich hätte da mal eine Frage.
Ich probiere mich gerade mit Symfony aus und hänge bei einem Problem bei der Verwaltung von Entity-Beziehungen. Folgende Situation:
Ich habe Symfony aufgesetzt und nutze zur User-Verwaltung das FOS/UserBundle. Das funktioniert alles ohne Probleme. Nun möchte ich, dass ein registrierter User, die Möglichkeit hat, zu seinem User-Account ein Benutzer-Profil (Spieler) anzulegen. Dies soll aber optional sein. Hat er kein Profil angelegt bleibt er normaler User. Ist ein Profil vorhanden ist er ein erweiterter User.
Um das zu realisieren habe ich eine One-To-One Relationship wie folgt angelegt.
User.php
PHP-Code:
namespace kinger\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* User
*
* @ORM\Table(name="user")
*/
class User extends BaseUser
{
...
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="Player", mappedBy="user_id");
* @ORM\JoinColumn(nullable=true)
*/
private $player;
...
PHP-Code:
namespace kinger\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Player
*
* @ORM\Table(name="profiles_player")
*/
class Player
{
...
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="User", inversedBy="player_id", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
...
1. Frage: Ist ein solcher Aufbau sinnvoll oder würdet ihr eine andere Lösung (wie zB extra User-Account für Spieler) vorschlagen?
Um das ganze nun zu Verwalten nutze ich das SonataAdminBundle. Ich habe eine Admin-Form für User und Spieler angelegt und diese funktionieren auch wie sie sollen. Nun habe ich die Form das Spieler-Entity wie folgt in die Verwaltung der User eingebunden.
PHP-Code:
$formMapper
->with('Spielerprofil')
->add('player', 'sonata_type_admin', array('label' => false))
->end()
;
Frage 2: Gibt es eine Möglichkeit, in der Form der User einen Button oder Ähnliches anzulegen, wo der Benutzer aktiv das Profil anlegen oder löschen kann? So, dass das Formular für den Spieler nur angezeigt wird, wenn ein Spieler-Profil angelegt worden ist?
(Es ist nicht ganz einfach sowas zu erklären, aber ich hoffe das passt so.)
Und dann habe ich noch ein allgemeine Frage.
Frage 3: Ist es sinnvoll die Logik von Benutzer und Spieler in zwei verschiedenen Bundles zu trennen oder spielt das eher weniger eine Rolle? Besser gefragt, gibt es einen Best-Practice für die Strukturierung von Bundles?
Grüße
Einen Kommentar schreiben: