porno porno izle rokettube
Ergebnis 1 bis 15 von 15

Thema: Problem mit Doctrine + ZF2 Authentication (Login)

  1. #1
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Problem mit Doctrine + ZF2 Authentication (Login)

    Guten Abend,

    folgendes Problem: Ich habe einen Login mit Doctrine und ZF2 realisiert. Funktioniert auch alles einwandfrei soweit bis auf das ich ein nicht vollständiges Objekt mitgeliefert bekomme.

    PHP-Code:
    private function getAuthentication($email$password) {         

      
    $password $this->getPasswordHash($password);         

      
    $auth $this->getServiceLocator()->get('Zend\Authentication\AuthenticationService');         

      
    $adapter $auth->getAdapter();  
           
      
    $adapter->setIdentityValue($email);        
      
    $adapter->setCredentialValue($password);        

      
    $result $auth->authenticate($adapter);         

      return 
    $result;    


    PHP-Code:
    object(Core\Entity\DbGaia\User)[484]
      private 
    'id' => int 3  
      
    private 'salutation' => string 'Herr' (length=4)  
      private 
    'firstname' => string 'Test' (length=7)  
      private 
    'lastname' => string 'Test' (length=7)  
      private 
    'email' => string 'test@test.de' (length=27)  
      private 
    'password' => string 'cc03e747a6afbbcbf8be7668acfebee5' (length=32)  
      private 
    'created' =>    object(DateTime)[482]      
                      public 
    'date' => string '2015-01-19 18:21:07.000000' (length=26)      
                      public 
    'timezone_type' => int 3      
                      
    public 'timezone' => string 'Europe/Berlin' (length=13)  
      private 
    'active' => boolean true  
      
    private 'deleted' => null  
      
    private 'customer' =>    object(DoctrineORMModule\Proxy\__CG__\Core\Entity\DbGaia\Customer)[531]      
      public 
    '__initializer__' =>        object(Closure)[487]      
         public 
    '__cloner__' =>        object(Closure)[488]      
          public 
    '__isInitialized__' => boolean false      
          
    private 'id' (Core\Entity\DbGaia\Customer) => int 1      
          
    private 'salutation' (Core\Entity\DbGaia\Customer) => null      
          
    private 'firstname' (Core\Entity\DbGaia\Customer) => null      
          
    private 'lastname' (Core\Entity\DbGaia\Customer) => null      
          
    private 'company' (Core\Entity\DbGaia\Customer) => null      
          
    private 'legalForm' (Core\Entity\DbGaia\Customer) => null 
              
    ...
          private 
    'created' (Core\Entity\DbGaia\Customer) => string 'CURRENT_TIMESTAMP' (length=17)      
          private 
    'active' (Core\Entity\DbGaia\Customer) => string '1' (length=1)      
          private 
    'deleted' (Core\Entity\DbGaia\Customer) => null      
          
    private 'contract' (Core\Entity\DbGaia\Customer) => null      
          
    private 'inputFilter' (Core\Entity\DbGaia\Customer) => null  
       
    private 'inputFilter' => null 

    Eigentlich sollte das Objekt voll befüllt sein, allerdings sind nur die id und active gesetzt. Habe schon öfters jetzt meine Entitys durchgeschaut aber komme irgendwie nicht vorran.
    Geändert von nookie (04.03.2015 um 10:41 Uhr)

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.500
    Thanks
    3
    Thanked 348 Times in 279 Posts

    Standard

    Willkommen im Forum!

    Leider kann niemand deine Code-Auszüge lesen und damit leider auch nicht helfen. Bitte formatiere den Code nochmals. (Eventuell mal mit einem anderen Browser den Code einfügen, falls die Formatierung verloren geht.)
    Danke!
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Danke für die herzliche Begrüßung. Wenn ich hier die volle Debug-Ausgabe posten möchte bekomme ich immer den Hinweis: "Post denied. New posts are limited by number of URLs it may contain and checked if it doesn't contain forbidden words.". Davon sollte aber nichts zutreffen.

    Edit: Nach einigen Versuchen hat es jetzt doch geklappt.
    Geändert von nookie (04.03.2015 um 10:42 Uhr)

  4. #4
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Also die Entity "Core\Entity\DbGaia\User" kommt wie gewollt, aber das Objekt "Core\Entity\DbGaia\Costumer" nur als leere Hülle?

    Das heißt, dass die Assoziation schonmal vorhanden ist. Sind denn in der Entity "Costumer" alle getter-Methoden zu den Properties vorhanden? (und der Vollständigkeitshalber natürlich auch sie setter?)

    Sieht aus, als würden es die Daten aus der Datenbank nämlich einfach nicht ins Model schaffen, wenn ich mir ansehe, dass sowohl "created" als auch "active" Informationen zurückliefern (die vermutlich standard-Angaben in der Entity selbst sind).

    Edit: Anderer Fall wäre natürlich, die von Dir erstellte Assoziation zwischen Entity "User" und "Costumer" hat einen Fehler, so dass das verknüpfte Objekt (Costumer) einfach nicht richtig zugeordnet werden kann. In dem Fall wird dann eben ein leeres (bzw neues) Model von Costumer wiedergegeben.
    Geändert von Powers (04.03.2015 um 13:12 Uhr)

  5. #5
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    Gehts um den Customer?

    Das ist ein Proxy Objekt.
    design patterns - What is a Proxy in Doctrine 2? - Stack Overflow

  6. #6
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    @michl

    Das würde wiederrum heißen, nookie sollte testweise Daten kriegen, wenn er beispielsweise eine Ausgabe auf $user->getCostumer()->getFirstname(); macht?
    -> sofern sonst alles korrekt modelliert ist?

  7. #7
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo,

    erstmal danke für die schnellen Antworten.

    @Powers
    Also die Entity "Core\Entity\DbGaia\User" kommt wie gewollt, aber das Objekt "Core\Entity\DbGaia\Costumer" nur als leere Hülle?

    Das heißt, dass die Assoziation schonmal vorhanden ist. Sind denn in der Entity "Costumer" alle getter-Methoden zu den Properties vorhanden? (und der Vollständigkeitshalber natürlich auch sie setter?)

    Sieht aus, als würden es die Daten aus der Datenbank nämlich einfach nicht ins Model schaffen, wenn ich mir ansehe, dass sowohl "created" als auch "active" Informationen zurückliefern (die vermutlich standard-Angaben in der Entity selbst sind).

    Edit: Anderer Fall wäre natürlich, die von Dir erstellte Assoziation zwischen Entity "User" und "Costumer" hat einen Fehler, so dass das verknüpfte Objekt (Costumer) einfach nicht richtig zugeordnet werden kann. In dem Fall wird dann eben ein leeres (bzw neues) Model von Costumer wiedergegeben.
    Alle Getter und Setter-Methoden zu den Properties sind vorhanden. Ich werde heute Abend, wenn ich daheim bin die zwei Entitys der vollständigkeits halber mal hier posten. Er scheint mir ja den richtigen Customer mit der "id" 1 zu holen (Es gibt bisher auch nur einen).

    Wenn ich $user->getCustomer()->getId() mache kriege ich die richtige ID zumindest zurück geliefert.


    @michl
    Ja es geht um den Customer.
    Geändert von nookie (04.03.2015 um 13:35 Uhr)

  8. #8
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    @Powers korrekt

  9. #9
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    @michl
    Okay danke. Wie erwartet kriege ich meine Daten mit dem Aufruf.

    Wenn ich das Objekt nun mitgebe über die Session (ist das überhaupt ratsam?), habe ich das Problem das ich danach folgende Fehlerausgabe bekomme wenn ich es aufrufen möchte:

    Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string

  10. #10
    N3X
    N3X ist offline
    Neuer Benutzer Avatar von N3X
    Registriert seit
    19.12.2014
    Beiträge
    18
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Standard

    Das Problem kommt mir bekannt vor.
    Wie holst du dir denn deine Daten ab? EM->getRepository() ->findBy()?

    Ähnliches Problem hatte ich mit Doctrine auch. Daraufhin habe ich via den Querybuilder mir einen Join auf eine weitere Tabelle gebaut, und konnte darüber die Daten erfassen.

    Beispiel als kurze zusammenfassung:

    $oEM = $serviceLocator->get("Doctrine\ORM\EntityManager");
    $oRepository = $oEM->getRepository("User\Entity\UserEntity");
    $oUser = $oRepository->createQueryBuilder('u')
    ->addSelect("userRole")
    ->join("u.role", "userRole")
    ->where("u.username = :username")
    ->setParameter("username", $this->getIdentity())
    ->getQuery()
    ->getSingleResult();
    -----
    Mit freundlichen Grüßen
    Ilya Beliaev

    http://blog.php-dev.info

  11. #11
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    @N3X
    Ja hole mit ganz normal meine Daten über $em->getRepository('Entity')->findBy().

  12. #12
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Hallo Nookie,

    hier kann ich direkt einhaken, weil ich erst vor wenigen Wochen einiges an Schmerz an dieser Stelle eingesammelt habe:

    Doctrine Objekte sind nicht voll cachebar! Alle Unterobjekte schrumpfen zu diesen "incomplete classes", wenn ein Doctrine Objekt in irgendeiner Weise zwischengespeichert wird.

    Ich habe das Thema im zusammenhang mit Caching mal angerissen:
    Doctrine 2 und Caching (Hier: APC)

    Da hatte aber auch sonst niemand ne Antwort drauf. Und ich habe, was caching von Doctrine Objekten angeht, wirklich einiges probiert. Beiß Dir in der Richtung also nicht zu sehr die Zähne aus und speicher in Deiner Session ggf punktuell, was Du benötigst. Also ID, user-Daten etc. und nicht das ganze Objekt. Falls hier doch jemand eine Lösung parat hat, gerne her damit..

  13. #13
    Neuer Benutzer Avatar von nookie
    Registriert seit
    03.03.2015
    Beiträge
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Zitat Zitat von Powers Beitrag anzeigen
    Hallo Nookie,

    hier kann ich direkt einhaken, weil ich erst vor wenigen Wochen einiges an Schmerz an dieser Stelle eingesammelt habe:

    Doctrine Objekte sind nicht voll cachebar! Alle Unterobjekte schrumpfen zu diesen "incomplete classes", wenn ein Doctrine Objekt in irgendeiner Weise zwischengespeichert wird.

    Ich habe das Thema im zusammenhang mit Caching mal angerissen:
    Doctrine 2 und Caching (Hier: APC)

    Da hatte aber auch sonst niemand ne Antwort drauf. Und ich habe, was caching von Doctrine Objekten angeht, wirklich einiges probiert. Beiß Dir in der Richtung also nicht zu sehr die Zähne aus und speicher in Deiner Session ggf punktuell, was Du benötigst. Also ID, user-Daten etc. und nicht das ganze Objekt. Falls hier doch jemand eine Lösung parat hat, gerne her damit..
    Danke für den Hinweis! Habe mir auch jetzt erstmal so beholfen das ich die ID usw. in der Session speicher. Hatte keine Lust mir noch mehr Zähne auszubeißen

  14. #14
    Erfahrener Benutzer
    Registriert seit
    18.08.2010
    Beiträge
    110
    Thanks
    7
    Thanked 1 Time in 1 Post

    Standard

    Ja, ich denke mittlerweile das es mit dem zusammenhängt, was michl oben in seinem Beitrag angemerkt hat - und zwar dass Unterobjekte stets Proxy-objekte sind, die bei Aufruf die Daten dann per LazyLoading erhalten und ausgeben.

    Meine Vermutung ist nun, dass dieser Umstand, der der Performancesteigerung dient, schlicht durchkreuzt wird, wenn ein Objekt durch Caching nicht mehr in Doctrine-eigener Norm abgelegt wird. Das sprengt wohl das von michl erläuterte (bzw verlinkte) System von Doctrine bei der Ausgabe von Daten.

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

    Standard

    Eine Möglichkeit (aber nicht DIE Lösung) könnte vielleicht die Verwendung von fetch="EAGER" in der Entity sein, siehe 21. Annotations Reference — Doctrine 2 ORM 2 documentation, oder vor der Speicherung in die Session mit clone zu arbeiten (das hatte damals wohl bei mir gewirkt - aber auch nicht schön)

    Mit derartigen Probleme hatte ich hier nämlich auch schon mal zu kämpfen. Letztlich habe ich mich jedoch ebenfalls dafür entschieden, nur die ID zwischenzuspeichern. Hat auch den Vorteil, dass Änderungen der Rolle o. ä. sich bereits beim nächsten Seitenaufruf auswirken und nicht erst beim nächsten Login. Damit wohl bei jedem Aufruf eine zusätzliche DB-Abfrage, aber vielleicht schöner als Eager Loading direkt in der Entity zu haben und damit auch dort überall die Rollen etc. mit abzufragen, wo sie gar nicht benötigt werden.

Ähnliche Themen

  1. Doctrine 2 mit einer stabilen ZF2 Installation?
    Von designkey im Forum ZF2 DB
    Antworten: 4
    Letzter Beitrag: 27.09.2012, 15:00
  2. Antworten: 3
    Letzter Beitrag: 14.04.2011, 14:33
  3. Auth + ACL Login Problem mit IE
    Von hiasl im Forum Offtopic
    Antworten: 7
    Letzter Beitrag: 11.12.2009, 16:59
  4. Antworten: 13
    Letzter Beitrag: 19.11.2008, 17:39
  5. User-Login: Problem mit Session ...
    Von Salvatore im Forum Auth
    Antworten: 13
    Letzter Beitrag: 17.08.2008, 13:59

Lesezeichen

Berechtigungen

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