[Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 07.04.2011, 23:14:34

Da hatte ich es zuerst. Kam aber auch eine Fehlermeldung.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dave » 07.04.2011, 23:17:34

Also die Config gehört natürlcih in den Config-Ordner, passend dem namespace. Habe im Moment den Überblick verloren, der Alk wirk und muss in Bett.

Die Chefs übernehmen, denke ich mal, viel Erolg! ;)

Prost,
Dave :ugeek:

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 07.04.2011, 23:21:07

:D
Danke für die Mühen!

Also dann nochmal anders. Ich habe jetzt den Ordner

Code: Alles auswählen

/apps/config/actions/messenger
erstellt und dort die DEFAULT_actionconfig.ini reingetan.

Die index.php dann wie folgt geändert:

Code: Alles auswählen

// Frontcontroller starten
import('core::frontcontroller', 'Frontcontroller');

$fC = &Singleton::getInstance('Frontcontroller');
$fC->setContext('messenger');
$fC->registerAction('actions', 'deleteAction'); 
Was dann immerhin zu dieser Meldung führt:

Code: Alles auswählen

Fatal error: Call to undefined method deleteMessageAction::getAttributesAsString() in /var/www/apf1/apps/tools/link/FrontcontrollerLinkHandler.php on line 280 

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Well » 07.04.2011, 23:30:47

Well hat geschrieben:

Code: Alles auswählen

FC.InputFile = "deleteMessageAction"
FC.InputClass = "deleteMessageAction"
Wie die Namen schon sagen, geben diese zwei Variablen die »Input«-Klasse an. (Siehe hier, »DemoInput«).
Leg eine zweite Datei an: »deleteMessageInput.php« (im gleichen Verzeichnis). In diese Datei kommt eine Klasse mit dem Namen »deleteMessageInput«, welche von »FrontcontrollerInput« erbt. Trage diese Datei und Klasse dann in deiner Konfigurationsdatei ein (siehe Zitat und Doku-Seite, Action und Input Klassen). :)

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 07.04.2011, 23:34:23

Danke Well!

Mir ist nun nur noch nicht ganz klar, wieso ich zwei Dateien benötige bzw. um auf meinen konkreten Fall zu kommen:

Die FC-Action soll einen Datensatz löschen (die Methode ist derzeit im Mapper). Rufe ich die dann in der deleteMessageAction.php auf? Wozu braucht es dann noch die deleteMessageInput.php?

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Well » 07.04.2011, 23:50:07

In deinem Anwendungsfall brauchst du sie vermutlich garnicht, d.h. du musst keine Methoden implementieren; vorhanden sein muss sie aber. Die Logik wird in der Action Klasse implementiert... (Bitte steinigen wenn das nicht stimmt...)

Wie genau das mit der Input Klasse ist... keine Ahnung, ich verstehs auch nicht so ganz. Da müssen wir wohl auf die andren warten. :)

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 07.04.2011, 23:57:36

Hilft mir dennoch etwas weiter. Mir geht es auch ums allgemeine Verständnis. Und ich muss sagen, dass ich von Beginn der Beitragserstellung bis hierher eine geniale Hilfestellung seitens der Forenteilnehmer erhalten habe. Meine Fragen sind für viele sicher absolutes Anfängerniveau und dennoch wird mir hier immer wieder weitergeholfen. Darüber bin ich wirklich sehr froh! Und mir persönlich hat es auch sehr, sehr viel geholfen! Ich versuche zwar anhand der Tutorials usw. die Zusammenhänge zu verstehen, aber es gibt eben immer wieder Stellen, an denen mir das Verständnis fehlt bzw. ich einfach hängen bleibe.

Ich habe also nun meine deleteMessageAction.php

Code: Alles auswählen

<?php
// Model / Mapper  einbinden
import('messenger::data', 'messengerMapper');

class deleteMessageAction extends AbstractFrontcontrollerAction{

    public function  run() {
    echo "Hallo Welt";
    }

    /**
     * Stellt die Datenbankverbindung her
     */
    private function &getMapper(){
    return $this->__getServiceObject('messenger::data', 'messengerMapper');
    }
}
?>
Sowie die deleteMessageInput.php

Code: Alles auswählen

<?php

class deleteMessageInput extends FrontcontrollerInput{

    public function  __construct() {
    }
    
}
?>
Jetzt bekomme ich bei jedem Seitenaufruf mein "Hallo Welt" angezeigt.

Ist das so wirklich richtig? Sollte diese Action nicht nur dann ausgeführt werden, wenn ich auf die Id einer Nachricht klicke? Mache ich da noch etwas grundsätzlich verkehrt?

Wie müsste ein korrekter Link aussehen, mit dem die Action ausgeführt wird?

Code: Alles auswählen

index.php?messenger-action:messageId:1

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Well » 08.04.2011, 00:06:20

Stimmt. Durch das »registerAction« in der Bootstraps Datei wird die Aktion bei jedem Aufruf aufgerufen. Entferne die Zeile nochmal und versuche es mal mit dem Aufruf:
index.php?actions-action:deleteAction=messageId:1

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 08.04.2011, 00:11:30

Klasse! :!:

Code: Alles auswählen

actions-action:deleteAction=messageId:1
Den Aufbau des Links kann ich allerdings nicht ganz verstehen.

Code: Alles auswählen

actions-action
Wie kommt das genau zustande?
actions-action?
Müsste es nicht messenger-action sein?

Code: Alles auswählen

deleteAction
Auch klar!

Code: Alles auswählen

messageId:1
Ganz klar, keine Frage.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Megger » 08.04.2011, 00:33:37

actions ist der Pfad zur DEFAULT_actionconfig, da messenger dein Context ist, ergibt sich daraus ein Pfad (-action gibt einfach an, dass es eine Action ist)
/config/actions/messenger
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 08.04.2011, 00:38:01

Ok.

Da hat mich die Komponenten-Dokumentation mit folgendem Beispiel dann etwas verwirrt:

Code: Alles auswählen

{namespace}-action:{config-name}={param1}:{value1}
Aber dann ist das geklärt.

Nur wie lese ich nun die messageId in der FC-Action aus, so dass ich damit die Löschung vornehmen kann?
Mittels

Code: Alles auswählen

$value = RequestHandler::getValue('messageId'); 
dürfte es schwerlich möglich sein...

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 08.04.2011, 00:56:00

Code: Alles auswählen

    $value = $this->getInput()->getAttribute('messageId'); 
So einfach kann es manchmal sein... ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4556
Registriert: 04.11.2007, 16:13:53

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von dr.e. » 08.04.2011, 09:53:13

Wie genau das mit der Input Klasse ist... keine Ahnung, ich verstehs auch nicht so ganz. Da müssen wir wohl auf die andren warten. :)
Die Input-Klassen sind dazu da, die Eingaben an die Action (=Parameter) zu kapseln. Aus diesem Grund lässt sich die messageId auch sehr einfach wie im vorangegangenen Post beziehen. Sofern keine besondere Verarbeitung der Eingaben (=Parameter) notwendig ist, ist die Input-Klasse ohnehin nur ein Skelett. Letzteres evtl. zu optimieren überlege ich gerade, denn sofern es nur ein Skelett ist, könnte man die Klasse FrontcontrollerInput, die bereits im APF enthalten ist, einfach nutzen. Aber dazu zu einem späteren Zeitpunkt. :)
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von ma2604121 » 08.04.2011, 11:12:23

Um das Beispiel noch abzurunden, fehlt nun nur noch die Anwendung des Pager-Moduls.

Hierzu habe ich zunächst folgende Ordner erstellt:

Code: Alles auswählen

/apps/config/modules/pager/messenger
/apps/config/modules/pager/messenger/statements
In

Code: Alles auswählen

/apps/config/modules/pager/messenger
liegt die DEFAULT_pager.ini mit folgendem Inhalt:

Code: Alles auswählen

[messagePager]
; Datenbankverbindung
Pager.DatabaseConnection = "MySQL"

; Anzahl der dargestellten Einträge pro Seite
Pager.EntriesPerPage = "5"

; Namen der URI-Parameter für Startpunkt und Anzahl/Seite
Pager.ParameterStartName = "PgrStr"
Pager.ParameterCountName = "PgrAnz"

; Namespace und Statements für Selektionen
Pager.StatementNamespace = "modules::pager"
Pager.CountStatement = "load_entries_count.sql"
Pager.CountStatement.Params = ""
Pager.EntriesStatement = "load_entry_ids.sql"
Pager.EntriesStatement.Params = ""

; Pager-Ausgabe Design
Pager.DesignNamespace = "messenger::pres::templates"
Pager.DesignTemplate = "main" 
Weiterhin ist in

Code: Alles auswählen

/apps/config/modules/pager/messenger/statements
die DEFAULT_load_entries_count.sql mit folgendem Inhalt

Code: Alles auswählen

SELECT COUNT(*) AS EntriesCount
FROM `messages` 
sowie die DEFAULT_load_entry_ids.sql mit folgendem Inhalt

Code: Alles auswählen

SELECT `messages`.`id` AS DB_ID 
FROM `messages`
ORDER BY `messages`.`mod` DESC LIMIT [Start], [EntriesCount]; 
Das dürfte soweit alles passen oder?

Dann brauche ich natürlich eine Methode, die mir die entsprechenden Daten liefert.

Und hier beginnen dann wieder meine üblichen Probleme:
Wo muss die sein?
Kann die auch mit in den Mapper, der bislang Verwendung findet?
Oder wäre es sinnvoller hier einen eigenen Mapper zu erstellen?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF

Beitrag von Screeze » 08.04.2011, 11:28:35

Dann brauche ich natürlich eine Methode, die mir die entsprechenden Daten liefert.

Und hier beginnen dann wieder meine üblichen Probleme:
Wo muss die sein?
Kann die auch mit in den Mapper, der bislang Verwendung findet?
Oder wäre es sinnvoller hier einen eigenen Mapper zu erstellen?
Ich vermute du willst eine Methode, der du die seitenzahl übergibst, und dann die entsprechenden Einträge bekommst? In dem Fall würde ich die in den gleichen Mapper packen. (getXyzByPage(..))

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast