[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
Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

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

Beitrag von Megger » 07.04.2011, 17:16:14

So muss ich nicht schauen, ob es den Teil der Url so schon gibt und diesen dann mit schleifen
Aber das kann ja auch gewünscht sein
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
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, 18:39:20

Klaro, auf jeden Fall!

In meinem Fall jedoch nicht ;) Ich setze die URL immer neu zusammen. Brauche für später ja noch Stellen, die sich optmieren lassen :D

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, 18:55:31

Irgendwie habe ich gerade einen Denkfehler...

Die Links sehen nun wie folgt aus:

Code: Alles auswählen

http://server/apf1/index.php?index=index&delete=69
Irgendwie ist mir nun nicht ganz klar, wie es weitergeht. Woher weiß das APF, welche Datei / welchen Controller es ausführen muss? Wahrscheinlich ist die Lösung ganz einfach, aber ich habe mich wohl in Gedanken total verrannt... :cry:

Vermutlich ist der URL-Aufbau auch falsch. Ich vermute der müsste eher wie folgt aussehen:

Code: Alles auswählen

http://server/apf1/index.php?page=delete&id=69
Ok, ich durch den zweiten Link, den ich oben nenne, ist es mir dann wieder klar geworden... Peinlich... :oops:

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, 20:09:51

Hmmm... Also so richtig klar ist es mir noch nicht ganz, wie die Komponenten miteinander "verzahnt" werden.

Ich habe den Mapper um eine Methode ergänzt, die eine Nachricht löschen kann:

Code: Alles auswählen

    public function deleteMessage($id){

    // Datenbankverbindung
    $SQL = &$this->getConnection();

    // Query
    $delete = 'DELETE FROM messages WHERE `id` = \'' . $SQL->escapeValue($id) . '\'';

    // Nachricht löschen
    $result = $SQL->executeTextStatement($delete);
    } 
In der Nachrichtenübersicht soll jede Nachricht mittels Klick auf die Id löschbar sein. Die Links sehen entsprechend aus:

Code: Alles auswählen

http://server/apf1/index.php?action=delete&id=1
Aktuell würde dann im Hauptdokument mittels

Code: Alles auswählen

<div id="content">
<core:importdesign
    namespace="messenger::pres::templates"
    template="[action=home]"
    incparam="action"
/>
</div> 
die Seite delete.html eingebunden.

Und ab da beginnen meine Verständnisschwierigkeiten...

Die delete.html könnte wie folgt aussehen:

Code: Alles auswählen

<h2>Nachricht löschen</h2>
<p>Soll die Nachricht mit der ID <html:placeholder name="id"/> wirklich gelöscht werden?</p>

<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<html:form name="msg">

<form:button name="send" value="Löschen"/>

</html:form> 
Bekommt die nun einen eigenen Controller, der nichts anderes macht, als nach Drücken des Löschen-Buttons die entsprechende Methode des Mappers auszuführen?

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, 20:29:37

ma2604121 hat geschrieben: Bekommt die nun einen eigenen Controller, der nichts anderes macht, als nach Drücken des Löschen-Buttons die entsprechende Methode des Mappers auszuführen?
So würde ich das erstmal der Einfachheit halber machen. Du kannst natürlich auch eine neue Klasse in den bereits existierenden Controller einbinden. Damit hast du dir immerhin die Datei gespart.

Es gibt aber auch noch die Möglichkeit des AJAX ;). Aber darüber würde dann im Hintergrund auch nur ne Action ausgeführt, welche die Methode des Mappers durchführt.

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, 20:36:00

dave hat geschrieben:So würde ich das erstmal der Einfachheit halber machen. Du kannst natürlich auch eine neue Klasse in den bereits existierenden Controller einbinden. Damit hast du dir immerhin die Datei gespart.
Und wie würde ich die dann innerhalb des messengerController aufrufen? Da klafft noch eine große Lücke in meinem Verständnis...
Müsste da dann anhand der $_GET-Daten eine Überprüfung stattfinden, welche Methode ausgeführt wird?
dave hat geschrieben:Es gibt aber auch noch die Möglichkeit des AJAX ;). Aber darüber würde dann im Hintergrund auch nur ne Action ausgeführt, welche die Methode des Mappers durchführt.
Eins nach dem anderen... ;) AJAX habe ich im Hinterkopf, aber erst soll mir mal das Grundprinzip klar werden.

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 » 07.04.2011, 20:51:51

Die alternative (und sogar schon die vorarbeit zu AJAX) wäre eine Frontcontroller-Action. Die kann auch direkt angesprochen werden, muss nicht zwingend durch AJAX passieren.
Dann hast/brauchst du kein Template, außer du willst eine Bestätitung vorher abschicken lassen, in dem Fall wäre dann die aktuelle Lösung schon die Sinnvollste denke ich.

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, 20:57:09

Screeze hat geschrieben:Die alternative (und sogar schon die vorarbeit zu AJAX) wäre eine Frontcontroller-Action. Die kann auch direkt angesprochen werden, muss nicht zwingend durch AJAX passieren.
Dann hast/brauchst du kein Template, außer du willst eine Bestätitung vorher abschicken lassen, in dem Fall wäre dann die aktuelle Lösung schon die Sinnvollste denke ich.
Mich interessieren letzendlich natürlich alle drei Varianten:
- meine derzeitige Variante mit einem Template zwecks Nachfrage
- im späteren eine AJAX-Umsetzung
- und die Frontcontroller-Action

Hast Du ein Beispiel, was ich mir unter der FC-Action vorstellen kann/muss?

Ich denke, dass das hier ist: Action- und Input-Klassen.
Leider kann ich mir anhand des Beispiels nicht genau klar machen, wie das funktioniert.

Wo muss die Datei hin?
Wie starte ich diese Action? Nur über den Link?

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, 22:37:45

So, ich bastel gerade an der FC-Action herum.

Ich habe nun zwei Ordner

Code: Alles auswählen

/apps/config/core/fcaction/messenger
/apps/messenger/fcactions
erstellt.

Im config-Ordner ist wiederum die DEFAULT_actionconfig.ini, die wie folgt aussieht

Code: Alles auswählen

[deleteAction]
FC.ActionNamespace = "messenger::fcactions"
FC.ActionFile = "deleteMessageAction"
FC.ActionClass = "deleteMessageAction"
FC.InputFile = "deleteMessageAction"
FC.InputClass = "deleteMessageAction"
FC.InputParams = "" 
In /apps/messenger/fcactions liegt wiederum die Datei deleteMessageAction.php, die derzeit wie folgt aussieht

Code: Alles auswählen

<?php

class deleteMessageAction extends AbstractFrontcontrollerAction{

    public function  run() {
    }
}
?>
Habe ich das soweit alles richtig verstanden?

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, 22:51:10

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«).

Btw., du solltest »deleteMessageAction« zu »DeleteMessageAction« umbennen (und den Dateinamen entsprechend anpassen).

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, 22:52:00

ma2604121 hat geschrieben:
dave hat geschrieben:So würde ich das erstmal der Einfachheit halber machen. Du kannst natürlich auch eine neue Klasse in den bereits existierenden Controller einbinden. Damit hast du dir immerhin die Datei gespart.
Und wie würde ich die dann innerhalb des messengerController aufrufen? Da klafft noch eine große Lücke in meinem Verständnis...
Müsste da dann anhand der $_GET-Daten eine Überprüfung stattfinden, welche Methode ausgeführt wird?
Ein "Austausch" zwischen zwei COntrollern ist meiner Meinung nach nicht möglich. Du kannst nunr einen Controller aus deiner HTML aus aufrufen ... aber bitte korrigiert mich, falsch das so falsch sein sollte!
ma2604121 hat geschrieben:Hast Du ein Beispiel, was ich mir unter der FC-Action vorstellen kann/muss?

Ich denke, dass das hier ist: Action- und Input-Klassen.
Leider kann ich mir anhand des Beispiels nicht genau klar machen, wie das funktioniert.
Das mit den Actions ist eine relativ komnplizierte Sache, wie eich finde. ;) Ich versuchs mal, in meien Suff gerade, anhand meines Projekts zu demonstrieren:

In deiner Bootstrap (index.php) definiserst du deine Action:

Code: Alles auswählen

$fC->registerAction('portal::actionconfig', 'GenericDomainObject'); 
Als nächstes wird die Config unter

Code: Alles auswählen

portal/actionconfig/{CONTEXT}/DEFAULT_actionconfig.ini
benötigt {CONTEXT} ist bei mir immer projectone aus dem ersten Tut (Website erstellen von Screeze), welches ich gelesen habe ^^

Diese Config-Datei sieht dann zum Beuspiel so aus:

Code: Alles auswählen

[GenericDomainObject]
FC.ActionNamespace = "sites::design1::pres::biz"
FC.ActionFile = "registerActionSession"
FC.ActionClass = "registerActionSession"
FC.InputFile = "registerActionInput"
FC.InputClass = "registerActionInput"
FC.InputParams = ""

Code: Alles auswählen

FC.ActionNamespace = "sites::design1::pres::biz"
zeigt, wo nach der entsrpechenden Datei mit dem Namen

Code: Alles auswählen

FC.ActionFile = "registerActionSession"
zu suchen ist.

Code: Alles auswählen

FC.ActionClass = "registerActionSession"
ist dann der Name der Klasse in der Action-Datei. Somit könnten auch mehrere verschiedene Actions in eine Action-Datei ;).

Code: Alles auswählen

FC.InputFile = "registerActionInput"
FC.InputClass = "registerActionInput"
Wozu das genau ist, ahbe ich bisher noch nicht so verstanden.

In meiner

Code: Alles auswählen

FC.InputFile = "registerActionInput"
steht auch einfach nur

Code: Alles auswählen

class registerActionInput extends FrontcontrollerInput {
    
       function registerActionInput(){
       }
    
}
 
mehr nicht. Was das genau sagt, heisst, bedeutet, wird vllt. im laufe der Diskussion noch erläutert :mrgreen:

Joah, in der

Code: Alles auswählen

FC.ActionClass = "registerActionSession"
mache ich dann schlussendlich das, was bei jedem Aufruf, egal welcher Seite, erstmalk durchlaufen werden soll. Bei mir ist das in dem Fall überprüfen und setzen/manipulieren der Session ;).

Soweit zur Action, vllt. hilft es ja :).

Viel Erfolg + Prost!
: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:03:13

So, ich habe das mal versucht umzusetzen, erhalte aber einen Fehler:

Code: Alles auswählen

Exception-ID:  	5f787e70f75d909ed5f51aec2e77fd1a
Type: 	ConfigurationException
Message: 	[IniConfigurationProvider::loadConfiguration()] Configuration with namepace "messenger::actionconfig", context "", language "de", environment "DEFAULT", and name "actionconfig.ini" cannot be loaded!
Number: 	256
File: 	/var/www/apf1/apps/core/configuration/provider/ini/IniConfigurationProvider.php
Line: 	77
Ich habe in der index.php folgende Zeile eingefügt:

Code: Alles auswählen

$fC->registerAction('messenger::actionconfig', 'deleteAction'); 
Dann habe ich den Ordner

Code: Alles auswählen

/apps/messenger/actionconfig/messenger/ 
erstellt.

In diesem liegt folgende DEFAULT_actionconfig.ini

Code: Alles auswählen

[deleteAction]
FC.ActionNamespace = "messenger::fcactions"
FC.ActionFile = "deleteMessageAction"
FC.ActionClass = "deleteMessageAction"
FC.InputFile = "deleteMessageAction"
FC.InputClass = "deleteMessageAction"
FC.InputParams = "" 
Und natürlich in

Code: Alles auswählen

/apps/messenger/fcactions/
die deleteMessageActions.php mit folgendem Inhalt

Code: Alles auswählen

<?php

class deleteMessageAction extends AbstractFrontcontrollerAction{

    public function  run() {
    }
}
?>

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:09:14

Ich würde auf die Schnelle sagen, der Context fehlt.

Hast du in deriner Bootastrap sowas ind er Art?

Code: Alles auswählen

$fC->setContext('projectone'); 
Dann musst du deinen Baum so anpassen:
/apps/messenger/actionconfig/messenger/

Code: Alles auswählen

/apps/messenger/actionconfig/projectone/
Wenn du ein

Code: Alles auswählen

$fC->setContext('messenger'); 
hast, sollte es kalppen. Aber laut Exceptione-Meldung wird gesagt, du hast keinen Context definiert.

Viel Erfolg :)

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:10:34

Die index.php sieht wie folgt aus:

Code: Alles auswählen

<?php
// Fehlermeldungen einschalten
ini_set('html_errors', 'on');

// Zeitzone setzen
date_default_timezone_set('Europe/Berlin');

// Pagecontroller starten
require_once './apps/core/pagecontroller/pagecontroller.php';

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

$fC = &Singleton::getInstance('Frontcontroller');
$fC->setContext('messenger');
$fC->registerAction('messenger::actionconfig', 'deleteAction');

// Startseite anzeigen
echo $fC->start('messenger::pres::templates', 'main');
?>
Context sollte also vorhanden sein...

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:11:07

Gehören Konfigurationsdateien nicht in Unterordner des »/config«s Ordner?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste