Empfehlungen: Erweiterte Suche

Redirect funktioniert nicht wie gewollt

Daten auslesen, verarbeiten und den Views übergeben

Redirect funktioniert nicht wie gewollt

Beitragvon Luckie » Mo 25. Mai 2009, 10:17

Code: Alles auswählen
  class UsersController extends AppController
  {
    var $name = 'Users';   
    var $helpers = array('Form');          
   
    function login()
    {        
        if(empty($this->data) == false)
        {
            //$this->User->validate($this->data);
            if(($user = $this->User->validateLogin($this->data['User'])) == true)
            {
              $this->Session->write('User', $user);                                            
              $this->redirect('/posts/adminpanel');
              exit();
            }
            else
            {
              $this->redirect('/users/accessdenied');
              //$this->Session->setFlash('Zugriff verweigert');            
              exit();
            }
        }      
    }  
  }

Der Redirect in dem else-Block funktioniert nicht. accessdenied ist eine ctp-Datei unter app/views/users. Als fehlermeldung bekomme ich:
Error: The action accessdenied is not defined in controller UsersController

Error: Create UsersController::accessdenied() in file: app\controllers\users_controller.php.

Das erste Redirect zum Adminpanel (adminpanel.ctp) funktioniert. Wo ist da der Unterschied? Das verstehe ich nicht.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Redirect funktioniert nicht wie gewollt

Beitragvon havanna » Mo 25. Mai 2009, 11:43

Hallo,

also die Fehlermeldung sagt ja ziemlich klar was fehlt: Es gibt keine Methode accessdenied() in deinem Users-Controller. Und wenn der Qelltext dein kompletter Quelltext des Users-Controllers ist, hat Cake auch vollkommen Recht ;)
Ich glaube dir sind die Grundzüge des MVC-Pattern noch nicht ganz klar
Zitat: accessdenied ist eine ctp-Datei unter app/views/users.

Wenn du einen redirect machst, machst du den in der Regel zu einem Controller und einer Funktion (das C in MVC). Die ctp-Datei ist lediglich das Schnipsel aus dem View. (das V in MVC).
Außer du würdest auf eine Page lenken - dann müsstest du aber den Page-Controller ansprechen und deine Page müsste im Verzeichnis app/views/pages liegen.

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Redirect funktioniert nicht wie gewollt

Beitragvon euromark » Mo 25. Mai 2009, 12:09

außerdem ist es sauberer, die array methode zu verwenden beim URL Aufbau
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Redirect funktioniert nicht wie gewollt

Beitragvon Luckie » Mo 25. Mai 2009, 15:10

Ah, OK, jetzt geht es:
Code: Alles auswählen
  class UsersController extends AppController
  {
    var $name = 'Users';   
    var $helpers = array('Form');          
   
    function login()
    {        
        if(empty($this->data) == false)
        {
            //$this->User->validate($this->data['User']);
            if(($user = $this->User->validateLogin($this->data['User'])) == true)
            {
              $this->Session->write('User', $user);                                            
              $this->redirect('/posts/adminpanel');
              exit();
            }
            else
            {
              $this->redirect('/pages/accessdenied');
              //$this->Session->setFlash('Zugriff verweigert');            
              exit();
            }
        }      
    }  
   
    function logout()
    {
        $this->Session->destroy('user');      
        $this->redirect('/posts');
    }  
  }


Aber komischer weise funktioniert der Redirect zum Adminpanel nicht mehr. Dabei bin ich mir ziemlich sicher, dass der schon funktioniert hat.

Um mal den Zusammenhang zu erläutern. Das ist ein Blog. Ich habe eine Tabelle posts in der alle Blog-Einträge abgeleht werden. Dazu gehört:
models\posts.php
controller\post_controller.php
views\posts\index.php -> Zeigt alle Beitrage an ohne Möglichkeiten zum Verfassen, Löschen und Editieren
views\posts\adminpanel.ctp -> Zeigt alle Beiträge an mit Möglichkeiten zum Verfassen, Löschen und Editieren

Dann habe ich eine Tabelle users. In dieser stehen die Personen, die das Blog verwalten:
models\users.php
controllers\user_controller.php
\viewa\users\login.ctp -> Loginformular

So, nach dem der Login erfolgreichwar, das funktioniert, muss jetzt das adminpanel Template aufgerufen werden. Und ich dachte das geht wie oben im Code. Verschiebe ich die Datei adminpanel.ctp nach views\pages ist die Variable posts unbekannt, deswegen hatte ich sie unter posts liegen, was auch am Freitag noch funktioniert hatte, aber jetzt irgendwie nicht mehr.

Wie löst man so was am besten? Ich hatee mir schon überlegt irgendwie einen admin_controller hinzuzufügen, nur bin ich da irgendwie stecken geblieben.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Redirect funktioniert nicht wie gewollt

Beitragvon euromark » Mo 25. Mai 2009, 19:40

einfach nur
Code: Alles auswählen
if(($user = $this->User->validateLogin($this->data['User'])))

reicht

und auch schöner:
Code: Alles auswählen
if(!empty($this->data))


exit() kannst dir ebenfalls komplett sparen


für admin routing verwendet man das "admin" routing von cake
sprich:
admin_panel.ctp
und:
/controller/panel
/admin/controller/panel
als Zugriffe

die methode heißt dann:
function panel() {}
und
function admin_panel() {}
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Redirect funktioniert nicht wie gewollt

Beitragvon Luckie » Di 26. Mai 2009, 08:58

euromark hat geschrieben:für admin routing verwendet man das "admin" routing von cake[7quote]
CakePHP hat da also schon was, was ich benutzen kann?

sprich:
admin_panel.ctp
und:
/controller/panel
/admin/controller/panel
als Zugriffe

die methode heißt dann:
function panel() {}
und
function admin_panel() {}

Langsam bitte, das ging mir jetzt etwas schnell und ist mir auch zu kurz. Ich bin noch neu bei CakePHP.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Redirect funktioniert nicht wie gewollt

Beitragvon euromark » Di 26. Mai 2009, 11:27

hast du dir denn noch nich das cookbook und die API von cake angeschaut?
http://book.cakephp.org/

weil danach dürften sich die meisten Fragen von selbst klären..
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Redirect funktioniert nicht wie gewollt

Beitragvon Luckie » Di 26. Mai 2009, 11:59

Ja, da habe ich auch schon geguckt, aber leider nichts passendes gefunden, was mir hätte weiterhelfen können.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Redirect funktioniert nicht wie gewollt

Beitragvon euromark » Di 26. Mai 2009, 16:14

euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Redirect funktioniert nicht wie gewollt

Beitragvon Luckie » Mi 27. Mai 2009, 10:34

Ich versuche das jetzt über das Admin Routing zu lösen. allerdings bekomme ich bei der Admin Weiterleitung den fehler:
Cannot modify header information - headers already sent by

Was soll denn das jetzt heißen?

Code: Alles auswählen
function login()
    {        
        if(empty($this->data) == false)
        {
            //$this->User->set($this->data);           
            //if ($this->User->isDataValid())
            {
              if(($user = $this->User->validateLogin($this->data['User'])) == true)
              {
                $this->Session->write('User', $user);                      
                $this->redirect('/admin/posts/');
                exit();
              }
              else
              {
                $this->redirect('/pages/accessdenied');
                //$this->Session->setFlash('Zugriff verweigert');              
                exit();
              }
            }
            /*else
            {
              $this->Session->setFlash('Eingaben unvollständig');
            }*/

        }      
    }

Und zwar bekomme ich das jetzt bei beiden Redirects.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Nächste

Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron