Empfehlungen: Erweiterte Suche

URL umformen Route anlegen

Fragen und Diskussionen zur Installation und Konfiguration von Cake.

URL umformen Route anlegen

Beitragvon Luckie » Mo 27. Jul 2009, 10:42

Folgendes Problem: Ich habe Benutzer und jeder Benutzer hat auch ein eindeutige E-Mail Adresse. Wenn man jetzt in der Liste der Benutzer auf "Editieren" klick, um einen Benutzer zu bearbeiten, hat man folgende URL in der Adresszeile des Browsers stehen: http://www.test.de/admin/benutzeraccounts/edit/1
Gewünscht wird jetzt aber, dass statt der ID des Benutzers seine E-Mail Adresse dort steht. Also so: http://www.test.de/admin/benutzeraccounts/edit/hp@test.de Genauso soll der View zum Editieren eines Benutzers über dessen E-Mail Adresse erreichbar sein.

Ich denke mal das geht über Routes, die in der Datei app/config/routes.php definiert sind. Allerdings weiß ich jetzt nicht, wie ich die gewünschte Route definieren muss. Wäre nett, wenn ihr mir dabei helfen könntet.

Also es müsste wohl irgendwie so aussehen:
Code: Alles auswählen
Router::connect('/admin/benutzeraccounts/edit/*', array('controller' => 'benutzeraccounts', 'action' => 'edit'))

Aber wie bekomme ich die Verknüpfung "Benutzer" -> E-Mail Adresse hin?

Ich meine, es müsste ungefähr so aussehen:
Code: Alles auswählen
Router::connect('/admin/benutzeraccounts/edit/:id', array('controller' => 'benutzeraccounts', 'action' => 'edit', array('id' => 'email')))

Allerdings funktioniert es nicht.

Anderer Weg über den Controller:
Wenn ich folgenden Code im Controller habe:
Code: Alles auswählen
function admin_edit($email = null)
    {
        echo "E-Mail: ".$email;
        if ($user = $this->benutzeraccount->find($email))
        {          
            $this->set('data', $user);
        }  
        else
        {
            echo "Nicht gefunden";
        }  
    }

und die Adresse lautet http://www.test.de/admin/benutzeraccounts/edit/hp@test.de dann gibt er mir zumindest schon mal die E-Mail Adresse aus. Allerdings findet er anscheinend den Datensatz nicht, weil wenn ich echo "E-Mail: ".$email auskommentiere, belibt die Seite leer - es passiert also gar nichts. Die Tabelle, in der er suchen soll heißt prefix_benutzeraccounts.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: URL umformen Route anlegen

Beitragvon euromark » Mo 27. Jul 2009, 15:28

was macht das denn für ein sinn?
heutige emailadressen müssen nicht urlencoded sein

ergo: nicht wirklich etwas, was man tun will
benutz besser die userid oder einen slug etc
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: URL umformen Route anlegen

Beitragvon Jörg » Mo 27. Jul 2009, 17:55

Hallo zusammen,
da jeder User einen Benutzernamen hat, kannst du ganz simpel eine eigene Spoken-Url für jeden User, anhand des Usernamens generieren.

Du schaust bei der Registierung, ob der Username schon vergeben wurde, wenn ja, dann hängst du an den Usernamen in ein separates Feld z.B. url eine "-1", "-2" ran.

Die Adresse sieht dann wie folgt aus: http://domain.de/user/bearbeiten/username, http://domain.de/user/bearbeiten/username-1, http://domain.de/user/bearbeiten/username-2

Dazu musst du natürlich eine Routine schreiben, die dir das alles aufbereitet.

Im Router übergibst du dann die Usernamen via einer Variable, z.B. "slug".
Code: Alles auswählen
Router::connect('/admin/benutzeraccounts/edit/:slug', array('controller' => 'benutzeraccounts', 'action' => 'edit'))


Diese Variable liest du dann in deinem Controller in der Action "edit" via $this->params["slug"] aus.

Gruß
Jörg
Jörg
 
Beiträge: 130
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Re: URL umformen Route anlegen

Beitragvon havanna » Mo 27. Jul 2009, 21:13

Hallo,

@Mark: Ich glaube ihm geht es darum eine sprechende URL zu haben, anstatt einer nichtssagenden ID.

@Luckie: Schaue dir mal den Artikel von Felix Geisendörfer an, ich glaube das geht in die richtige Richtung.

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: URL umformen Route anlegen

Beitragvon Luckie » Di 28. Jul 2009, 08:17

Also ich habe es jetzt fast über den Controller geschaft: controller/datensatz-uber-e-mail-adresse-editieren-t327.html

Code: Alles auswählen
    function admin_edit($param = null)
    {      
        echo "Parameter: ".$param."<br>";  // debug
        if ($user = $this->Benutzeraccount->findByEmail($param))
        {                      
            print_r($user);  // debug
            //$this->set($user);
            //$this->set('data', $user);
            $this->set('id', $user->id);                   
        }  
        else if($user = $this->Benutzeraccount->findById($param))
        {
            $this->set('id', $param);
        }
        else
        {
            $this->Session->setFlash(__('Der Benutzer konnte nicht gefunden werden.', true), 'default', array(), 'error');
        }  
    }

Allerdings bleiben die Formularfelder im View noch leer und ich weiß nicht warum. Wenn ich das geschaft habe, dann muss ich nur noch dafür sorgen, dass in dem View mit der Liste beim Link zum editieren nicht die ID genommen wird, sondern die E-Mail Adresse und schon habe ich, was ich will.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: URL umformen Route anlegen

Beitragvon Luckie » Di 28. Jul 2009, 08:41

Geschafft. Es musste heißen:
Code: Alles auswählen
$user["Benutzeraccount"]["id"]
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: URL umformen Route anlegen

Beitragvon euromark » Di 28. Jul 2009, 12:48

autsch
er lässts aber trotz wink mit dem zaunpfahl nich bleiben - die emails als parameter zu verwenden^^
viel spaß mit umlautdomains z.b.
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: URL umformen Route anlegen

Beitragvon Luckie » Di 28. Jul 2009, 14:10

euromark hat geschrieben:er lässts aber trotz wink mit dem zaunpfahl nich bleiben - die emails als parameter zu verwenden^^
viel spaß mit umlautdomains z.b.

Wenn ich machen könnte, was ich wollte, dann würde ich jetzt am Palmenstrand in der Südsee sitzen. Der Kunde will es so, also bekommt er es auch so. Über die Vor- und Nachteile wurde er aufgeklärt.

Sinn ist der, dass man Benutzer schnell editieren kann, wenn man deren Namen kennt. Die E-Mail Adressen sind alle nach dem gleichen Schema aufgebaut: Initialien + @ + Domain. Kennt man den Namen, kann man schnell über die Adresszeile im Browser die URL eingeben ohne erst lange in einer Liste suchen zu müssen.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: URL umformen Route anlegen

Beitragvon havanna » Di 28. Jul 2009, 21:37

Hallo Luckie,

man muss auch mal nein sagen können. Bestimmte Dinge mache ich nicht. Und wenn der Kunde es unbedingt möchte. Insbesondere dann nicht, wenn ich weiß dass das auf Dauer nicht gut geht. Ich denke auch das die Umlaute noch einige Sorgen bereiten werden.
Dann sage ich mir "soll es ein anderer machen". Nach einem halben Jahr klopfe ich wieder an, um mich zu erkundigen, wieviel Euronen er jetzt für die Sache schon ausgegeben hat ;)

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: URL umformen Route anlegen

Beitragvon euromark » Di 28. Jul 2009, 23:53

tut mir leid - kundenwünsche haben seine grenzen
dies mag noch ein akteztables randbeispiel sein
aber wir sehen doch alle ein, dass der code zukunftsicher und zuverlässig sein sollte - und wenn dann der kunde auch mal auch so ein quatsch verzichten muss..

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

Nächste

Zurück zu Installation und Konfiguration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron