Empfehlungen: Erweiterte Suche

Vorgehen bei dynamischer Kopfzeile

Fragen zur Konzeptionierung und womit man am besten anfäng? Hier rein...

Vorgehen bei dynamischer Kopfzeile

Beitragvon patinkin » So 21. Dez 2008, 11:57

Hallo Zusammen,
bin neu hier und brauche einen Rat zur Vorgehensweise: Hab eine Anwendung mit der Auth-Componente.
Nach dem erfolgreichen Login sollen Benutzerdaten (name, VName usw) aus der Datenbank auf allen folgenden Seiten in einem div-Container gepackt werden, die dann allen Views zur Verfügung stehen. Die Daten nehme ich aus dem Session Array und frage das User-Model ab.
Nun: Wenn ich das DRY-Konzept einhalten möchte, was soll ich nutzen? Helper? Wie kommt ein helper an das User-Model? Element? Die sollten doch nur statischen Text ausgeben. Components die ich im App_Controller.php einbinde? Stehe da ein wenig auf dem Schlauch.
Danke...

patinkin
patinkin
 
Beiträge: 3
Registriert: So 21. Dez 2008, 11:48

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon Mathias » So 21. Dez 2008, 17:48

patinkin hat geschrieben:Nach dem erfolgreichen Login sollen Benutzerdaten (name, VName usw) aus der Datenbank auf allen folgenden Seiten in einem div-Container gepackt werden, die dann allen Views zur Verfügung stehen. Die Daten nehme ich aus dem Session Array und frage das User-Model ab.
Nun: Wenn ich das DRY-Konzept einhalten möchte, was soll ich nutzen? Helper? Wie kommt ein helper an das User-Model? Element? Die sollten doch nur statischen Text ausgeben.

Ich würde einfach ein Element laden, sobald ein User eingeloggt ist. Warum sollte ein Element nur für statischen Text benutzt werden?
patinkin hat geschrieben:Die Daten nehme ich aus dem Session Array und frage das User-Model ab.

Reicht es denn nicht, einfach in dem Element dann die Session-Daten auszulesen? Die sind doch in der User Session gespeichert.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon patinkin » Mo 22. Dez 2008, 05:22

Dank Dir...
Klar, ich kann einem Element ein zweiten Parameter aus der Session übergeben:

echo->$this->element('headline',array('user'=>$id);

Nur: Was macht das element mit der $id aus der Session die den Primärschlüssel der Tabelle users darstellt?
Wann und wo greife ich auf das Model zu?
Derzeit mache ich das noch im Controller und lasse mit

$this-set('user',$users)

ein array an die view schicken, welches dann über zig Zeilen abgefragt wird.
Aber genau diese Abfrage müsste ich nun auf jeder Seite der Applikaton durchführen, und das will ich vermeiden
In einem Element hab ich doch kein Zugriff auf das Model.
Danke
patinkin
 
Beiträge: 3
Registriert: So 21. Dez 2008, 11:48

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon Flo » Di 23. Dez 2008, 02:42

kenne mich jetzt nicht mit der AuthComponente aus, allerdings würde ich dir folgendes vorschalgen,
speichere die daten in der Session, und rufe sie im AppController wieder ab...

Code: Alles auswählen
class AppController extends Controller {
function beforeRender(){
$userData = $this->Session->read('userData');
$this->set('userData',$userData);
}


dann noch ein element einrichten das mit $userData arbeitet und diese im Layout verwenden, fertig
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon Mathias » Di 23. Dez 2008, 12:46

@ patinkin
Du greifst nie mit der View oder einem Element auf das Model zu. View und Elements sind nur zum Darstellen von verarbeiteten Daten zuständig. Die Interaktion mit dem Model passiert im Controller.
Du kannst von einer View oder einem Element eine Anfrage an den Controller schicken, die dann vom Controller verarbeitet wird.
In einem Element hast du die Möglichkeit, so genannte RequestActions an den Controller zu schicken. In meinem Beispiel möchte ich die letzten 3 Einträge aus dem articles-Model haben.
Code: Alles auswählen
    <?php
    $articles = $this->requestAction('articles/index/limit:3');
    foreach($articles as $article):?>
                            <h5><?php echo $article['Article']['title'];?></h5>
                            <?php echo $html->link($text->truncate(nl2br($article['Article']['content']), 100, '...', false),
                            array('controller' => 'articles', 'action'=>'view', $article['Article']['id']), array('style' => 'display: block; margin-bottom: 20px;'), null, array('escape' => false));
        ?>
    <?php endforeach;?>

In der index action im Controller articles müsstest du noch folgendes hinzufügen:
Code: Alles auswählen
        if(isset($this->params['requested'])) {
             return $articles;
        }

Ebenfalls musst den RequestHandler deklarieren.

Ich verstehe aber nicht, warum du immer wieder das User-Model abfragen willst. Ändern sich dort immer wieder Informationen, die auf der View geupdatet werden müssen?

@ Flo
Es macht wenig Sinn, die Session auszulesen und sie in ein Array zu packen, wenn man die Session direkt in der View auslesen kann. Auth speichert alle User-Informationen in der Session ab.
Also kannst du auch im Element direkt die Session auslesen.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon Flo » Mi 24. Dez 2008, 00:10

Mathias hat geschrieben:@ Flo
Es macht wenig Sinn, die Session auszulesen und sie in ein Array zu packen, wenn man die Session direkt in der View auslesen kann. Auth speichert alle User-Informationen in der Session ab.
Also kannst du auch im Element direkt die Session auslesen.


haste natürlich Recht :-)
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon patinkin » Do 25. Dez 2008, 10:04

Vielen Dank Euch Beiden,
also elements nur für verarbeitete Daten, okay!
Ich denke, dass die Lösung des RequestHandlers die richtige für mich ist.

@Matthias: Ich möchte das Model auch nicht ständig abfragen müssen. Genau genommen ist es so: Ich habe User, diese User arbeiten in einer Institution (1:n) und eine Institution hat viele Departments (1:n). Nach dem Login sollten die Information zum User (Institution und Department) rekursiv abgefragt werden. Hierfür frage ich nach Login das Session-Array ab, in dem ich den Primärschlüssel der Users-Tabelle finde. Klappt auch alles. Und in einer Kopfzeile der Applikation sollen diese Infos erscheinen. <- Und genau hierfür suchte ich eine Lösung, so dass ich nicht auf jeder Seite der Applikation den Code eingeben muss.

Okay, ich mach also ein Element und versuche den Controller abzufragen.

Vielen Dank und frohes Fest!

patinkin
patinkin
 
Beiträge: 3
Registriert: So 21. Dez 2008, 11:48

Re: Vorgehen bei dynamischer Kopfzeile

Beitragvon Mathias » Fr 26. Dez 2008, 14:35

Dann frage doch in deiner login-action all diese Daten ab und speicher sie in der Session. Somit sind sie überall verfügbar und du hast sie auch nur einmal abgefragt.
Wo du letztendlich die Daten abfragst, ist eigentlich irrelevant. Ich würde bloß vorher checken, ob die Sessionvariable gesetzt ist und wenn ja, dann die Daten abfragen. Sonst hast du Fehlermeldungen, wenn du noch eingeloggt bist.
Die ganze Kopfzeile kannst du zum Beispiel in ein Element schreiben und in der default.ctp inkludieren. Somit bastelst du dir einmal ein Element und fügst es dann ein, wenn du eingeloggt bist.
Oder du schreibst es in die default.ctp. Auch hier fragst du vorher ab, ob du eingeloggt bist. wenn ja, führe den Code aus, wenn nicht, dann nicht.
Somit hättest du alles auch nur einmal geschrieben.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x


Zurück zu Konzeption und Vorgehensweise

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron