turk porno porno escort rokettube
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 20 von 24

Thema: Benutzer-Modul mit Doctrine2

  1. #1
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard Benutzer-Modul mit Doctrine2

    Hallo,

    ich möchte gerne das Benutzer-Modul aus dem Buch mit Doctrine2 umsetzen. Für diesen Zweck habe ich die Klasse DbBcryptAdapter angepasst:

    PHP-Code:
    $user $this->getUserRepository()->findOneBy(array('username' => $this->getIdentity())); 
    Mein Problem ist dabei die AclServiceFactory, bei welcher die Benutzerrolle abgefragt wird. Das sieht dann bei mir jedoch folgendermaßen aus:

    Code:
    __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => DoctrineORMModule\Proxy\__CG__\User\Entity\Group [__isInitialized__] => [id:protected] => [name:protected] => [allowedResources:protected] => )
    Wenn ich das richtig gelesen habe, liegt es daran, dass die Session bereits gestartet wurde, bevor die Gruppe abgerufen werden kann (oder so). Doch welche Änderung kann ich vornehmen, damit die Gruppe abrufbar ist?

    Irgendwo habe ich den Vorschlag gelesen, einen eigenen SessionStorage zu verwenden. Also habe ich eine AuthStorage-Klasse, die von Storage\Session ableitet, geschrieben. Jedoch weiß ich auch dort nicht, wie und wo ich das gescheit in dem Code unterbringen kann - und ob das überhaupt der richtige Weg gewesen wäre.

    Habe den halben Tag damit verbracht, irgendwelche Sachen auszuprobieren, jedoch ohne Erfolg. Ich möchte da jetzt nicht unbedingt aus Verzweiflung doch noch auf Doctrine2 verzichten. Wäre schön, wenn jemand da einen Tipp für mich hätte.

  2. #2
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Bin auf dem Sprung. Aber kannst du vielleicht noch etwas mehr Butter bei die Fische geben. Was genau machst du? Wo genau erscheint dieser Fehler?

    Danke, Ralf

  3. #3
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    In der createService-Methode des AclServiceFactory gibt es ja die folgende Zeile:

    PHP-Code:
    $role $auth->hasIdentity() ? $auth->getIdentity()->getGroup() : 'guest'
    $auth->getIdentity() ist wie gewünscht meine User-Entity. Auch getGroup() gibt theoretisch die Gruppe zurück; doch an der Stelle in der AclServiceFactory nicht. Wenn ich dort $role mit var_dump ausgeben lasse, erhalte ich dann den oben im Code-Block genannten Wert (PHP Incompatible Class Object).

    Das führt dann zu dem Fehler:

    Fatal error: Uncaught exception 'Zend\View\Exception\InvalidArgumentException' with message '$role must be a string, null, or an instance of Zend\Permissions\Role\RoleInterface; object given'
    Anmerkung: Meine Group-Entity implementiert das RoleInterface. Und wenn ich mir im DbBcryptAdapter die Gruppe ausgeben lasse, funktioniert das auch korrekt. Nur halt an der Stelle in der AclServiceFactory ist das (noch?) nicht bekannt.

    Bis auf die im Startpost genannte Änderung habe ich den Code eigentlich nicht großartig geändert; nur die UserTable-Sachen habe ich rausgekickt, weil ich ja Doctrine2 dafür verwenden wollte.

  4. #4
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Irgendwelche Ideen? Hat vielleicht jemand anderes mal versucht das Modul mit Doctrine2 zu realisieren? Ich dürfte ja wohl kaum der einzige sein, der eine Authentifizierung im Zusammenspiel mit Doctrine2 möchte ohne auf ZfcUser zurückgreifen zu müssen. Ich stecke derzeit jedenfalls total fest und komme überhaupt nicht mehr weiter :/

  5. #5
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    So, war wie gesagt letzte Woche auf Schulung und komme jetzt erst langsam dazu, alles Liegengebliebende aufzuarbeiten. Ich muss ehrlich zugeben, dass ich Doctrine 2 bisher noch in keinem Projekt ernsthaft eingesetzt habe, somit tappe ich auch etwas im Dunkeln.

    Eigentlich steht in der besagten Factory ja folgendes. Da gibt es also kein getGroup(), sondern getRole().

    PHP-Code:
    class ServiceFactory implements FactoryInterface
    {
        public function 
    createService(ServiceLocatorInterface $serviceLocator)
        {
            
    $config $serviceLocator->get('Config');
            
    $auth   $serviceLocator->get('User\Auth\Service');
            
    $role   $auth->hasIdentity() 
                    ? 
    $auth->getIdentity()->getRole() 
                    : 
    'guest';
            
    $acl    = new Service($role$config['acl']);
            return 
    $acl;
        }

    Kannst du einmal direkt hinter der Zuweisung für $auth dies einfügen:

    PHP-Code:
    \Zend\Debug\Debug::dump($auth->getIdentiy()); 
    Und wie sieht deine geänderte UserEntity Klasse genau aus?

    Gruß,

    Ralf

  6. #6
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Hallo Ralf,

    Zitat Zitat von Ralf Beitrag anzeigen
    Eigentlich steht in der besagten Factory ja folgendes. Da gibt es also kein getGroup(), sondern getRole().
    Ja, stimmt. Daran dürfte es aber wohl nicht liegen. Ich bevorzuge gerne die Bezeichnung "Gruppe". Die Methode getRole() existiert.


    Zitat Zitat von Ralf Beitrag anzeigen
    Kannst du einmal direkt hinter der Zuweisung für $auth dies einfügen: [..]
    Klar:
    Code:
    object(User\Entity\User)#442 (4) {
      ["id":protected] => int(1)
      ["group":protected] => object(__PHP_Incomplete_Class)#443 (5) {
        ["__PHP_Incomplete_Class_Name"] => string(48) "DoctrineORMModule\Proxy\__CG__\User\Entity\Group"
        ["__isInitialized__"] => bool(false)
        ["id":protected] => NULL
        ["name":protected] => NULL
        ["allowedResources":protected] => NULL
      }
      ["username":protected] => string(6) "Stefan"
      ["password":protected] => string(0) ""
    }
    Wie schon gesagt: Innerhalb der authenticate-Methode erhalte ich via getGroup() auch die gewünschte Gruppe. Doch anscheinend landet das nicht im Storage.


    Zitat Zitat von Ralf Beitrag anzeigen
    Und wie sieht deine geänderte UserEntity Klasse genau aus?
    Folgendermaßen:
    PHP-Code:
    <?php
    namespace User\Entity;
    use 
    Doctrine\ORM\Mapping as ORM;

    /**
     * User Entity
     * 
     * @ORM\Entity
     * @ORM\Table(name="user")
     */
    class User
    {
       
    /**
        * UserID
        * @var integer
        * @ORM\Id
        * @ORM\Column(type="integer")
        * @ORM\GeneratedValue
        */
       
    protected $id;

       
    /**
        * Benutzergruppe
        * @var Group
        * @ORM\ManyToOne(targetEntity="User\Entity\Group")
        * @ORM\JoinColumn(name="group_id", referencedColumnName="id")
        */
       
    protected $group;

       
    /**
        * Benutzername
        * @var string
        * @ORM\Column(type="string")
        */
       
    protected $username;

       
    /**
        * Passwort
        * @var string
        * @ORM\Column(type="string")
        */
       
    protected $password;

       
    /**
        * @return integer
        */
       
    public function getId()
       {
           return 
    $this->id;
       }

       
    /**
        * @param integer $id 
        */
       
    public function setId($id)
       {
           
    $this->id $id;
           return 
    $this;
       }

       
    /**
        * @return string
        */
       
    public function getUsername()
       {
           return 
    $this->username;
       }

       
    /**
        * @param string $name 
        */
       
    public function setUsername($name)
       {
           
    $this->username $name;
           return 
    $this;
       }

       
    /**
        * @return string
        */
       
    public function getPassword()
       {
           return 
    $this->password;
       }

       
    /**
        * @param string  $password
        * @return \User\Entity\User
        */
       
    public function setPassword($password)
       {
           
    $this->password $password;
           return 
    $this;
       }

       
    /**
        * @return Group
        */
       
    public function getGroup()
       {
           return 
    $this->group;
       }

       
    /**
        * @param Group $group
        * @return User
        */
       
    public function setGroup(Group $group)
       {
           
    $this->group $group;
           return 
    $this;
       }

       
    /**
        * @param array $options
        * @return User
        */
       
    public function exchangeArray(array $options null)
       {
           if (
    is_array($options)) {
               
    $this->setOptions($options);
           }
           return 
    $this;
       }

       
    /**
        * @param String $name
        * @param Mixed $value
        * @throws \Exception
        */
       
    public function __set($name$value)
       {
           
    $method 'set' $name;
           if (!
    method_exists($this$method)) {
               throw new \
    Exception('Invalid method');
           }
           
    $this->$method($value);
       }

       
    /**
        * @param String $name
        * @throws \Exception
        */
       
    public function __get($name)
       {
           
    $method 'get' $name;
           if (!
    method_exists($this$method)) {
               throw new \
    Exception('Invalid method');
           }
           
    $this->$method();
       }

       
    /**
        * @param array $options
        */
       
    public function setOptions(array $options)
       {
           foreach (
    $options as $key => $value) {
               
    $keyArr explode("_"$key);
               
    $method 'set';
               for (
    $i 0$i count($keyArr); $i++) {
                   
    $method .= ucfirst($keyArr[$i]);
               }
               if (!
    method_exists($this$method)) {
                   continue;
               }
               
    $this->$method($value);
           }
       }

       
    /**
        * @return array
        */
       
    public function __toArray()
       {
           return 
    get_object_vars($this);
       }

    }
    Gruß, Stefan

  7. #7
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Hallo Stefan,

    ich vermute auch, dass es an der Serialisierung / Deserialisierung für den Session-Storage liegen könnte. Könntest du einmal folgendes Testskript bauen, das unabhängig vom Auth und Session ist:

    - Lade eine UserEntity aus der Datenbank und gib sie aus
    - Schreibe die serialisierte UserEntity als String in eine Datei xyz
    - Gebe den Inhalt dieser Datei aus
    - Lade den String aus der Datei xyz, deserialisiere ihn und gibt ihn aus

    Danke und Gruß,

    Ralf

  8. #8
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Ich bin jetzt natürlich nicht so der Profi und wusste bis eben nicht mal wirklich, was Serialisierung ist. Was ich gemacht habe, ist folgendes:


    PHP-Code:
    $handle fopen("userdump.txt""w");
            
    rewind($handle);
            
    fwrite($handleserialize($user));
            
    fclose($handle);
            
            
    $filedata file_get_contents("userdump.txt");
            
    $newuser unserialize($filedata);
            \
    Zend\Debug\Debug::dump($newuser); 

    Ich hoffe, das war korrekt. Die Ausgabe sieht dann wie folgt aus:


    Code:
    object(User\Entity\User)#466 (4) {
      ["id":protected] => int(1)
      ["group":protected] => object(DoctrineORMModule\Proxy\__CG__\User\Entity\Group)#463 (6) {
        ["_entityPersister":"DoctrineORMModule\Proxy\__CG__\User\Entity\Group":private] => NULL
        ["_identifier":"DoctrineORMModule\Proxy\__CG__\User\Entity\Group":private] => NULL
        ["__isInitialized__"] => bool(false)
        ["id":protected] => NULL
        ["name":protected] => NULL
        ["allowedResources":protected] => NULL
      }
      ["username":protected] => string(6) "Stefan"
      ["password":protected] => ...Hash entfernt...
    }

    Ich vermute mal mit meinem Halbwissen, dass das "Problem" im Endeffekt auch das Lazy Loading sein dürfte. Denn wenn ich vor dem serialisieren einfach mal irgendwo $user->getGroup()->getName() aufrufe (und damit explizit die Gruppe/Rolle abrufe), sieht das Ergebnis schon anders aus:


    Code:
    object(User\Entity\User)#565 (4) {
      ["id":protected] => int(1)
      ["group":protected] => object(DoctrineORMModule\Proxy\__CG__\User\Entity\Group)#465 (6) {
        ["_entityPersister":"DoctrineORMModule\Proxy\__CG__\User\Entity\Group":private] => NULL
        ["_identifier":"DoctrineORMModule\Proxy\__CG__\User\Entity\Group":private] => NULL
        ["__isInitialized__"] => bool(true)
        ["id":protected] => int(1)
        ["name":protected] => string(13) "Administrator"
        ["allowedResources":protected] => object(Doctrine\ORM\PersistentCollection)#575 (9) {
          ["snapshot":"Doctrine\ORM\PersistentCollection":private] => array(0) {
          }
          ["owner":"Doctrine\ORM\PersistentCollection":private] => NULL
          ["association":"Doctrine\ORM\PersistentCollection":private] => NULL
          ["em":"Doctrine\ORM\PersistentCollection":private] => NULL
          ["backRefFieldName":"Doctrine\ORM\PersistentCollection":private] => NULL
          ["typeClass":"Doctrine\ORM\PersistentCollection":private] => NULL
          ["isDirty":"Doctrine\ORM\PersistentCollection":private] => bool(false)
          ["initialized":"Doctrine\ORM\PersistentCollection":private] => bool(false)
          ["coll":"Doctrine\ORM\PersistentCollection":private] => object(Doctrine\Common\Collections\ArrayCollection)#576 (1) {
            ["_elements":"Doctrine\Common\Collections\ArrayCollection":private] => array(0) {
            }
          }
        }
      }
      ["username":protected] => string(6) "Stefan"
      ["password":protected] => ... Hash entfernt...
    }
    Vielleicht hilft dir das irgendwie weiter? Wenn ich den Aufruf einfach mal in der authenticate-Methode mache, sieht die Ausgabe in der Factory ähnlich aus; dann jedoch immer noch mit dem __PHP_Incomplete_Class anstelle von DoctrineORMModule\Proxy\__CG__\User\Entity\Group.

  9. #9
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Habe noch einmal etwas gegooglet. Vielleicht hilft dir dieser Beitrag ja weiter:

    php - Doctrine 2: Can entities be saved into sessions? - Stack Overflow

    Ansonsten könntest du vielleicht in der Session nur die User ID als Identity speichern und die User Entity dann jeweils dazu laden.

    Hilft das weiter?

    Gruß,

    Ralf

  10. The Following User Says Thank You to Ralf For This Useful Post:

    av3nger (02.05.2013)

  11. #10
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Hallo Ralf,

    vielen Dank, dass du dir die Mühe gemacht hast. Die Eigenschaften waren bei mir schon auf protected. Wenn ich dann in der authenticate-Methode folgenden Code schreibe, klappt es wunderbar:

    PHP-Code:
    $this->authenticateResultInfo['identity'] = clone $user
    Lasse ich mir dann in der createService-Methode der Factory die Identity dumpen, steht da wie gewünscht auch die Benutzergruppe drin. Ansonsten hätte es auch mit dem alternativen Vorschlag funktioniert (dass ich da nicht selbst drauf gekommen ist). Also ja, das hilft definitiv weiter.

    Gruß, Stefan

  12. #11
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Klasse! Dann habe ich wieder etwas gelernt und das Aufstehen gestern morgen war nicht umsonst... ;-)

    Gruß,

    Ralf

  13. #12
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hallo zusammen,

    bevor ich hier ein neues Thema aufmache, dachte ich mir ich melde mich hier einfach zu Wort, da ich ein ähnliches Problem habe. (Hoffe das ist in Ordnung)

    Ich habe auch nach dem Buch mein Benutzermodul erstellt, ebenfalls mit Doctrine.

    Mein Problem ist liegt eben auch in der ACL ServiceFactory.

    Ich versuche auf die UserEntity zuzugreifen, das funktioniert soweit auch. Meine Userrole habe ich in einer anderen Tabelle gespeichert, dementsprechend möchte ich mir über $auth->getIdentity()->getUserRole()->getRoleName() den rollennamen geben lassen.

    Hierbei tritt folgendes Problem auf:

    Code:
    The script tried to execute a method or access a property of an  incomplete object. Please ensure that the class definition  &quot;DoctrineORMModule\Proxy\__CG__\User\Entity\UserRole&quot;  of the object you are trying to operate on was loaded _before_  unserialize() gets called or provide a __autoload() function to load the  class definition
    Da ich noch nicht wirklich lange mit dem ZF arbeite, geschweige denn mit dem ZF2 bin ich mir nicht sicher, wie ich hier nun vorgehe um meinen Rolennamen doch noch zu erhalten.

    Vielleicht könnt ihr mir da helfen?

    Viele Grüsse
    Thomas

  14. #13
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Es wäre hilfreich, auch etwas Code zu sehen. Ich selbst würde jetzt wohl in der authenticate-Methode der DbCryptAdapter-Klasse schauen. Hast du es dort auch mit dem Klonen versucht, wie ich bei Post #10?

    Falls ja und du kommst damit trotzdem nicht weiter, würde ich versuchen, auf das Lazy-Loading an der Stelle zu verzichten. Wenn du also wie ich den User mit Hilfe von findOneBy() suchst, ersetzt du den Aufruf durch eine DQL-Abfrage mit dem Query Builder. Wenn du dort direkt die passenden Tabellen joinst, holt sich Doctrine2 die Werte dafür direkt mit, sodass die dann zum Zeitpunkt der Serialisierung Bestandteil des Objekts sein sollten. Wäre jedenfalls mal ein Test wert.

    Notfalls könntest du es auch machen, wie Ralf in Post #9 vorgeschlagen hat: Nur die ID speichern und dann jeweils die Entity frisch laden. Dann kommst du auf jeden Fall an die Gruppe. Ist in meinen Augen aber eher eine Notlösung, weil du dann bei jedem Seitenaufruf den User auslesen würdest.

  15. #14
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hi av3nger,

    ich danke dir für deine Antowrt. Ich werde das gleich mal so versuchen umzusetzten. Gestern habe ich das mit dem clonen versucht, das hat aber leider nicht geklappt. Bin mir ehrlich gesagt gerade aber nicht mehr ganz sicher, ob ich das an der richtigen Stelle getan habe.

    Ansonsten versuche ich mich mit der DQL Abfrage. Ich melde mich später nochmals.
    Gruss Thomas
    Geändert von thenouse (09.07.2013 um 10:49 Uhr)

  16. #15
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Ich habe nun nochmals in der authenticate Methode das clonen versucht,

    ich erhalte jedoch immernoch ein nicht fertiges Objekt für den Eintrag in der Rollen-Tabelle:

    In der Authenticate Methode hole ich den User über
    Code:
    findOneBy(array('email' => $this->getIdentity()))
    ;

    nach erfolgreicher Prüfung des Nutzers schriebe ich den User mit clone in die authenticateResultInfo.

    Code:
    $this->authenticateResultInfo['identity'] = clone $user;


    Hier das User Object und das zugehörige Rollen Objekt:

    PHP-Code:
    object(UserGJ\Entity\User)#309 (16) {   ["id":protected] => int(8)    ["username":protected] => string(10) "hans wurst"    ["password":protected] => string(0) ""   ["email":protected] =>  string(21) "thomas.jansen@enyx.ch"   ["registered":protected] =>  object(DateTime)#310 (3) {     ["date"] => string(19) "2013-07-04  16:43:53"     ["timezone_type"] => int(3)     ["timezone"] =>  string(13) "Europe/Berlin"   }   ["status":protected] => NULL    ["isCompany":protected] => int(0)    ["isProfileEnabledForPublic":protected] => NULL    ["isChatEnabled":protected] => NULL   ["uuid":protected] => NULL    ["token":protected] => NULL   ["state":protected] => NULL    ["userRole":protected] => object(__PHP_Incomplete_Class)#311 (6) {      ["__PHP_Incomplete_Class_Name"] => string(53)  "DoctrineORMModule\Proxy\__CG__\UserGJ\Entity\UserRole"      ["__isInitialized__"] => bool(false)     ["id":protected] =>  int(3)     ["roleName":protected] => NULL     ["role":protected]  => NULL     ["permissions":protected] => NULL   } 

    Ich werde nun den Lösungsansatz mit einem DQL-Query versuchen. Habe ich dich richtig verstanden Av3nger, das ich die Codezeile mit repo->findBy durch den DQL-Query ersetzen muss?


    //Edit: kann mir noch einer verraten, wie ich den Code hier im Forum formatiert darstellen kann? So ist es ein wenig unübersichtlich

    Gruss

  17. #16
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von thenouse Beitrag anzeigen
    //Edit: kann mir noch einer verraten, wie ich den Code hier im Forum formatiert darstellen kann? So ist es ein wenig unübersichtlich
    Hast du mal einen anderen Browser zum Einfügen von Code-Auszügen versuchst? Denn die diversen Browser behandeln dies unterschiedlich.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  18. #17
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Bei der authenticate-Methode scheint das wohl ähnlich wie bei mir zu sein. Wenn du an der Stelle deine Rolle abrufen würdest, erhältst du aber auch einen Wert, oder?

    Zitat Zitat von thenouse Beitrag anzeigen
    Ich werde nun den Lösungsansatz mit einem DQL-Query versuchen. Habe ich dich richtig verstanden Av3nger, das ich die Codezeile mit repo->findBy durch den DQL-Query ersetzen muss?
    Ja genau, so wäre jedenfalls mein nächster Ansatz. Habe ich bislang aber selbst noch nicht getestet. Das könnte dann in etwa so aussehen:

    PHP-Code:
    $user $this->em->getRepository('UserGJ\Entity\User')->createQueryBuilder('u')
                    ->
    addSelect('r')
                    ->
    leftJoin('u.userRole''r')
                    ->
    where('g.email = :email')
                    ->
    setParameter('email', $$this->getIdentity())
                    ->
    getQuery()
                    ->
    getSingleResult(); 

    Bei em noch den Variablennamen oder getter für den EntityManager ersetzen, der Rest sollte eigentlich schon passen.

  19. #18
    Erfahrener Benutzer Avatar von [-UFO-]Melkor
    Registriert seit
    06.01.2009
    Beiträge
    327
    Thanks
    0
    Thanked 34 Times in 31 Posts

    Standard

    Ich vermute dein Problem hängt hiermit zusammen: Entities in the Session.

    Generell würde ich aber auch dazu raten, lediglich die User-ID in der Session zu speichern.
    Blog über PHP und das ZF2

  20. #19
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Das sehe ich etwas anders, denn das Problem ist auf der Seite eigentlich nicht erwähnt. Er will ja nur, so wie ich zuvor auch, nur den Namen der Gruppe z. B. für die ACL abrufen. Im ersten Abschnitt geht es lediglich darum, dass diese dann nicht mehr änderbar sind und nicht für Verweise anderer Entities zur Verfügung stehen. In dem Fall soll aber ja nur von der gespeicherten Entity etwas ausgelesen werden.

    Im zweiten Absatz ist es mit "If you serialize this object into the session then you don’t want to serialize the related entities as well" eher das komplette Gegenteil, denn die Gruppe soll ja mit serialisiert werden. Empfohlen wird die Serialisierung zwar nicht, aber wäre es nicht auch unschön, bei jedem Seitenaufruf den Benutzer und dessen Gruppe aus der Datenbank auszulesen? Ich persönlich versuche jedenfalls die Anzahl von DB-Abfragen gering zu halten, selbst wenn es nur simple Abfragen sind.

    Was da wirklich best pratice ist, weiß ich aber auch nicht. Im Buch schreibt Ralf jedoch auch das ganze User-Objekt in die Session, daher kann es ja vermutlich nicht allzu falsch sein.
    Geändert von av3nger (09.07.2013 um 16:21 Uhr)

  21. #20
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Habe mich damit noch nicht weiter beschäftigt, aber vielleicht steckt in dem ZfcUserDoctrineORM Modul ja ein Weg, das Problem zu lösen:

    https://github.com/ZF-Commons/ZfcUserDoctrineORM

    Hilft das weiter?

    Gruß,

    Ralf

Seite 1 von 2 1 2 LetzteLetzte

Ähnliche Themen

  1. Unittests ZF2, Doctrine2 neues Skeleton
    Von ulffel im Forum Testing & Deployment
    Antworten: 0
    Letzter Beitrag: 13.02.2012, 14:51
  2. Single Table Inheritance zf+doctrine2
    Von ulffel im Forum PHP X-Talk
    Antworten: 4
    Letzter Beitrag: 12.04.2011, 17:00
  3. Frage zur Einbindung von Doctrine2
    Von MartinFH im Forum Konzepte & Ideen
    Antworten: 9
    Letzter Beitrag: 12.11.2010, 00:57
  4. Doctrine2 Application Resource ZF1.10
    Von PeHaPe im Forum FAQ/Howto
    Antworten: 2
    Letzter Beitrag: 01.11.2010, 16:55
  5. Antworten: 8
    Letzter Beitrag: 02.09.2007, 23:43

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •