porno porno izle rokettube
Ergebnis 1 bis 12 von 12

Thema: Auf Daten zugreifen, wenn der Request kein Post ist

  1. #1
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard Auf Daten zugreifen, wenn der Request kein Post ist

    Hallo,

    ich stehe wieder einmal vor einem kleinen Problem:

    Ich möchte den User mit seinem Namen (in der View) begrüßen. Dazu hole ich mir nach dem Post den Usernamen aus dem Formular.

    Die klappt soweit auch nach dem ersten Absenden.

    Wenn der User jedoch bereits angemeldet ist und zurückkehrt, findet ja kein Post mehr statt und der Username ist leer.

    Hier mal meine indexAction:

    PHP-Code:
    public function indexAction() {
       
    $form $this->getLoginForm();

       
    $superUser = new SuperUser();
       
    $user      = new User();

       
    $viewModel = new ViewModel();
       
    $viewModel->setVariable'form'$form );

       
    $request $this->getRequest();
       if ( 
    $request->isPost() ) {
          
    $form->setData$request->getPost() );
          if ( 
    $form->isValid() ) {
             try {
                
    $accountName             strtolower$form->get'AccountName' )->getValue() );
                
    $superUser->_accountName $accountName;
                
    $user->_superAccountName $accountName;
                
    $superUser               $this->getSuperUserTable()->getUser$superUser );
                
    $viewModel->setVariable'superUser'$superUser ); // Auf das Superuser Objekt möchte ich in der View zugreifen. Auch nach einem Request, der kein Post ist! Wie stelle ich das am besten an?
             
    } catch ( \Exception $e ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );

                return 
    $viewModel;
             }

             if ( ! 
    $this->authenticate$this->getHash$form ), $form )->isValid() ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );
             }
          }
       }

       
    $flashmessenger $this->flashMessenger();
       if (
    $flashmessenger->hasInfoMessages()) {
          
    $return = array();
          
    $return['messages'] = $flashmessenger->getInfoMessages();
          
    $viewModel->setVariable('successMessages'$return['messages']);
       }

       return 
    $viewModel;



  2. #2
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard

    Habs jetzt mal mit einer Variable probiert, die ich beim Post setze. Irgendwie funktioniert es aber trotzdem nicht:

    PHP-Code:
    public function indexAction() {
       
    $form $this->getLoginForm();

       
    $viewModel = new ViewModel();
       
    $viewModel->setVariable'form'$form );

       
    $request $this->getRequest();
       if ( 
    $request->isPost() ) {
          
    $form->setData$request->getPost() );
          if ( 
    $form->isValid() ) {
             
    $superUser = new SuperUser();
             
    $user      = new User();
             
             try {
                
    $accountName             strtolower$form->get'AccountName' )->getValue() );
                
    $superUser->_accountName $accountName;
                
    $user->_superAccountName $accountName;
                
    $superUser               $this->getSuperUserTable()->getUser$superUser );
                
    $this->setSuperUser($superUser);
             } catch ( \
    Exception $e ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );

                return 
    $viewModel;
             }

             if ( ! 
    $this->authenticate$this->getHash$form ), $form )->isValid() ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );
             }
          }
       }

       
    $flashmessenger $this->flashMessenger();
       if (
    $flashmessenger->hasInfoMessages()) {
          
    $return = array();
          
    $return['messages'] = $flashmessenger->getInfoMessages();
          
    $viewModel->setVariable('successMessages'$return['messages']);
       }

       
    $viewModel->setVariable'superUser'$this->getSuperUser() );

       return 
    $viewModel;



  3. #3
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    Wenn der User jedoch bereits angemeldet ist und zurückkehrt, findet ja kein Post mehr statt und der Username ist leer.
    Ich entnehme deinem Beitrag, es geht um angemeldete Benutzer. Und genau dann hast du doch alle Daten! Wozu nochmals alles aus einem „Request“ lesen? Verwende einfach die hinterlegten Benutzerdaten!
    Nachdem der Benutzer angemeldet ist, Umleitung auf gewünschte Seite setzen und dort im View-Skript per „Identity“-View-Helfer die Benutzerdaten holen.

    Nichts mit Request oder POST, die Thematik ist bereits abgeschlossen und nur für den eigentlichen Anmeldeprozess notwendig.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  4. #4
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard

    Danke KaiUwe. Durch dich habe ich schon so viel gelernt.

    Ich habe es jetzt wie untenstehend realisiert. Leider ist mein AuthStorage nach dem Redirect leer, obwohl ich vorher die Daten reingeschrieben habe.
    Vielleicht hast du noch den entscheidenden Tipp.

    PHP-Code:
    public function indexAction() {
       
    $form $this->getLoginForm();

       
    $viewModel = new ViewModel();
       
    $viewModel->setVariable'form'$form );

       
    $request $this->getRequest();
       if ( 
    $request->isPost() ) {
          
    $form->setData$request->getPost() );
          if ( 
    $form->isValid() ) {

             if ( ! 
    $this->authenticate$this->getHash$form ), $form )->isValid() ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );
             } else {
                
    $storage $this->getAuth()->getStorage();
                
    $storage->write($this->getAuthAdapter()->getResultRowObject());
                
    $this->redirect()->toRoute('success');
             }
          }
       }

       return 
    $viewModel;

    }

    public function 
    successAction() {
       if (! 
    $this->getAuth()->hasIdentity()) {
          return 
    $this->redirect()->toRoute('home');
       } else {
          
    $viewModel = new ViewModel();

          
    $flashmessenger $this->flashMessenger();
          if ( 
    $flashmessenger->hasInfoMessages() ) {
             
    $return             = array();
             
    $return['messages'] = $flashmessenger->getInfoMessages();
             
    $viewModel->setVariable'successMessages'$return['messages'] );
          }

          
    var_dump($this->getAuth()->getStorage()); //hier sind keine Daten der Anmeldung drin!?
       


  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    PHP-Code:
    var_dump($this->getAuth()->getStorage()); //hier sind keine Daten der Anmeldung drin!? 
    Komplett leer dürfte es nicht sein, denn dann würde die vorherige Abfrage mit „hasIdentity“ schon anschlagen.

    Somit würde ich mal einen Schritt davor schauen, was denn überhaupt als Inhalt geschrieben wird. Also hier:
    Zitat Zitat von Frau Bauer Beitrag anzeigen
    PHP-Code:
    $storage->write($this->getAuthAdapter()->getResultRowObject()); 
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  6. #6
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Somit würde ich mal einen Schritt davor schauen, was denn überhaupt als Inhalt geschrieben wird. Also hier:
    PHP-Code:
    var_dump($this->getAuthAdapter()->getResultRowObject());die; 
    Liefert:
    Code:
    object(stdClass)#516 (3) {   ["AccountName"]=>   string(16) "info@example.com"   ["SuperAccountName"]=>   string(2) "tt"   ["AccountPasswd"]=>   string(44) "0f01a00abxxxxxxxxxx651c23b4ea16028a5b19afeae" }

  7. #7
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    Liefert:
    Code:
    object(stdClass)#516 (3) {   ["AccountName"]=>   string(16) "info@example.com"   ["SuperAccountName"]=>   string(2) "tt"   ["AccountPasswd"]=>   string(44) "0f01a00abxxxxxxxxxx651c23b4ea16028a5b19afeae" }
    Dann stimmt dies soweit.

    Leider doch nicht ganz, denn ein Passwort und selbst wenn es nur ein Hash ist, gehört da nicht rein! Daher:

    PHP-Code:
    $resultRow $adapter->getResultRowObject(
        [
            
    'AccountName',
            
    'SuperAccountName',
        ]
    );

    $user = new User($resultRow->AccountName); // Beispiel

    $storage->write($user); 
    („AccountName“ und „SuperAccountName“ sind für einen Außenstehenden – also mich – total verwirrend.)

    Nach der Umleitung oder irgendwann später einfach:
    PHP-Code:
    public function successAction()
    {
        
    /** @var User $user */
        
    if ($user $this->identity()) {
            
    // Benutzerdaten abfragen
            
    $user->getName();
        }

    Oder im View-Skript:

    PHP-Code:
    <?php
    /** @var User $user */
    $user $this->identity();
    ?>
    <p>Hallo <?= $user->getName() ?></p>
    Mit „Bordmitteln“ ist dies also schnell gelöst!
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  8. #8
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    PHP-Code:
    public function successAction() {
       if (! 
    $this->getAuth()->hasIdentity()) {

       } else {
          
    $viewModel = new ViewModel();

          
    $flashmessenger $this->flashMessenger();
          if ( 
    $flashmessenger->hasInfoMessages() ) {
             
    $return             = array();
             
    $return['messages'] = $flashmessenger->getInfoMessages();
             
    $viewModel->setVariable'successMessages'$return['messages'] );
          }

       } 
    Der „FlashMessenger“-Kram kann hier ebenfalls komplett weg!


    Einfach:
    PHP-Code:
    public function loginAction()
    {
        
    // Anmeldeprozess

        
    $this->flashMessenger()->addSuccessMessage(
            
    'Deine Anmeldung war erfolgreich'
        
    );

        
    // Umleitung

    Im View-Skript dann nur:
    PHP-Code:
    <h3>Willkommen</h3>

    <?php
    // Erfolgsmeldung mit entsprechenden Klassen für CSS
    echo $this->flashMessenger()->render(
        
    Zend\Mvc\Plugin\FlashMessenger\FlashMessenger::NAMESPACE_SUCCESS,
        [
            
    'alert-box',
            
    'success',
        ]
    );
    ?>
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  9. #9
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard

    Hallo KaiUwe. Wow. Danke für deine Tipps.
    Zur Erläuterung:
    AccountName -> ist der Anmeldename des Accounts.
    SuperAccountName -> ist der Name der Person zur persönlichen Begrüßung.
    Namen wurden so vorgegeben.

    Aber du hattest wohl doch Recht: Beim Speichern in den Storage geht wohl etwas schief.

    Meine Anmelde-Funktion sieht derzeit so aus:

    PHP-Code:
    public function indexAction() {
       
    $form $this->getLoginForm();

       
    $viewModel = new ViewModel();
       
    $viewModel->setVariable'form'$form );

       
    $request $this->getRequest();
       if ( 
    $request->isPost() ) {
          
    $form->setData$request->getPost() );
          if ( 
    $form->isValid() ) {

             if ( ! 
    $this->authenticate$this->getHash$form ), $form )->isValid() ) {
                
    $viewModel->setVariable'message''Anmeldedaten falsch!' );
             } else {
                
    $storage $this->getAuth()->getStorage();
                
    $adapter $this->getAuthAdapter();
                
    $resultRow $adapter->getResultRowObject(array(
                   
    'AccountName',
                   
    'SuperAccountName'
                
    ));
                
    $superUser = new SuperUser();
                
    $superUser->setAccountName($resultRow->AccountName);
                
    $superUser->setSuperAccountName($resultRow->SuperAccountName);
                
    $storage->write($superUser);
                
    var_dump($superUser);die; // hierin befinden sich AccountName und SuperAccountName aus dem ResultRow Objekt.
                
    var_dump($storage);;die; // hierin befindet sich u.a. folgendes:
                // object(ZendSkeletonModule\Model\SuperUser)#448 (3) { ["_accountName"]=> NULL ["_superAccountName"]=> NULL ["_accountPasswd"]=> NULL }
                // das SuperUser Objekt müsste doch eigentlich die obigen Daten enthalten!?
                
    $this->redirect()->toRoute('success');
             }
          }

       }

       return 
    $viewModel;


    Vielleicht kannst du mir hier weiterhelfen. Wenn du noch Infos brauchst, sag mir einfach welche und ich liefere sie.

    Herzlichen Dank

  10. #10
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    Aber du hattest wohl doch Recht: Beim Speichern in den Storage geht wohl etwas schief.
    Schau dir mal direkt die Superglobale „$_SESSION“ an und nicht „$storage“:

    PHP-Code:
    var_dump($_SESSION);

    // und genauer hier
    var_dump($_SESSION['Zend_Auth']); 
    Denn dies ist das endgültige Ziel, wo die Daten hingeschrieben werden. (außer man hat eine andere Speicherung angegeben)
    Geändert von Kaiuwe (23.05.2017 um 10:27 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  11. #11
    Erfahrener Benutzer
    Registriert seit
    30.09.2010
    Beiträge
    125
    Thanks
    3
    Thanked 3 Times in 1 Post

    Standard

    Danke. In $_SESSION['Zend_Auth'] steht alles korrekt drin.

    Wie nutze ich das jetzt mit dem Framework. Mit $_SESSION zu hantieren ist ja nicht sehr elegant.

  12. #12
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.513
    Thanks
    4
    Thanked 353 Times in 284 Posts

    Standard

    Zitat Zitat von Frau Bauer Beitrag anzeigen
    Wie nutze ich das jetzt mit dem Framework. Mit $_SESSION zu hantieren ist ja nicht sehr elegant.
    Wir haben nur geprüft, ob alles an der richtigen Stelle eingetragen wurde.

    Den Rest findest du bereits oben in meinem Beitrag mit den „Identity“-View-Helfer und -Plugin.

    Hier noch ein anderer Beitrag zu dem Thema: Wie kann ich die Default DB (local.php) mit den Authentification-prozess durchführen.
    Geändert von Kaiuwe (23.05.2017 um 13:29 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. json daten nach jquery ajax post request verarbeiten?
    Von Lit-Web im Forum Einsteigerfragen
    Antworten: 2
    Letzter Beitrag: 11.12.2012, 11:31
  2. auf Request im Plugin zugreifen
    Von flod im Forum MVC
    Antworten: 8
    Letzter Beitrag: 23.08.2010, 14:53
  3. [Zend_Translate] Fallback greift nicht, wenn kein Locale da ist
    Von strolch00 im Forum Lokalisierung & Internationalisierung
    Antworten: 4
    Letzter Beitrag: 18.12.2008, 17:32
  4. Wenn kein Modul gefunden: Fallback auf Route?
    Von buddy_casino im Forum MVC
    Antworten: 11
    Letzter Beitrag: 29.04.2008, 18:19
  5. request->getParam('id') empfängt nur GET, kein POST!
    Von deklarmart im Forum Einsteigerfragen
    Antworten: 5
    Letzter Beitrag: 22.02.2008, 15:23

Lesezeichen

Berechtigungen

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