[Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Da hatte ich es zuerst. Kam aber auch eine Fehlermeldung.
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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
Die Chefs übernehmen, denke ich mal, viel Erolg!

Prost,
Dave

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

Danke für die Mühen!
Also dann nochmal anders. Ich habe jetzt den Ordner
Code: Alles auswählen
/apps/config/actions/messenger
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');
Code: Alles auswählen
Fatal error: Call to undefined method deleteMessageAction::getAttributesAsString() in /var/www/apf1/apps/tools/link/FrontcontrollerLinkHandler.php on line 280
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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).Well hat geschrieben:Wie die Namen schon sagen, geben diese zwei Variablen die »Input«-Klasse an. (Siehe hier, »DemoInput«).Code: Alles auswählen
FC.InputFile = "deleteMessageAction" FC.InputClass = "deleteMessageAction"

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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?
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?
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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.
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.

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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
Sowie die deleteMessageInput.php
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?
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');
}
}
?>
Code: Alles auswählen
<?php
class deleteMessageInput extends FrontcontrollerInput{
public function __construct() {
}
}
?>
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
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Klasse!
Den Aufbau des Links kann ich allerdings nicht ganz verstehen.
Wie kommt das genau zustande?
actions-action?
Müsste es nicht messenger-action sein?
Auch klar!
Ganz klar, keine Frage.

Code: Alles auswählen
actions-action:deleteAction=messageId:1
Code: Alles auswählen
actions-action
actions-action?
Müsste es nicht messenger-action sein?
Code: Alles auswählen
deleteAction
Code: Alles auswählen
messageId:1
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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
/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
APF-Version
- Entwicklung: 2.0
- Produktiv: 1.15
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Ok.
Da hat mich die Komponenten-Dokumentation mit folgendem Beispiel dann etwas verwirrt:
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
dürfte es schwerlich möglich sein...
Da hat mich die Komponenten-Dokumentation mit folgendem Beispiel dann etwas verwirrt:
Code: Alles auswählen
{namespace}-action:{config-name}={param1}:{value1}
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');
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Code: Alles auswählen
$value = $this->getInput()->getAttribute('messageId');

Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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.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.

Viele Grüße,
Christian
Christian
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
Um das Beispiel noch abzurunden, fehlt nun nur noch die Anwendung des Pager-Moduls.
Hierzu habe ich zunächst folgende Ordner erstellt:
In
liegt die DEFAULT_pager.ini mit folgendem Inhalt:
Weiterhin ist indie DEFAULT_load_entries_count.sql mit folgendem Inhalt
sowie die DEFAULT_load_entry_ids.sql mit folgendem Inhalt
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?
Hierzu habe ich zunächst folgende Ordner erstellt:
Code: Alles auswählen
/apps/config/modules/pager/messenger
/apps/config/modules/pager/messenger/statements
Code: Alles auswählen
/apps/config/modules/pager/messenger
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"
Code: Alles auswählen
/apps/config/modules/pager/messenger/statements
Code: Alles auswählen
SELECT COUNT(*) AS EntriesCount
FROM `messages`
Code: Alles auswählen
SELECT `messages`.`id` AS DB_ID
FROM `messages`
ORDER BY `messages`.`mod` DESC LIMIT [Start], [EntriesCount];
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?
Re: [Beispiel] Verständnis Umsetzung MVC innerhalb des APF
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(..))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?
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast