Zugriff auf Parameter in FCInput-Klassen!?

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von MrNiceGuy » 11.07.2009, 12:34:56

Moin!

Hintergrund: Ich habe iene FC-Action, die standardmäßig geladen wird. Hierfür brauche ich Parameter aus dem GET-Part, jedoch kann ich innerhalb der Input-Klasse weder über $_GET, noch über $_REQUEST auf die Inhalte direkt zugreifen, lediglich die Variable 'query' ist verfügbar. Nun stellt sich mir die Frage, ob ich imemr manuell über den froncontrollerLinkHandler diesen interpretieren muss oder ob ich einfach nur eine Möglichkeit übersehen habe auf die entsprechenden Inhalte zuzugreifen!?
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von dr.e. » 11.07.2009, 14:39:43

Hallo Lutz,
Hintergrund: Ich habe eine FC-Action, die standardmäßig geladen wird. Hierfür brauche ich Parameter aus dem GET-Part, jedoch kann ich innerhalb der Input-Klasse weder über $_GET, noch über $_REQUEST auf die Inhalte direkt zugreifen, lediglich die Variable 'query' ist verfügbar. Nun stellt sich mir die Frage, ob ich imemr manuell über den froncontrollerLinkHandler diesen interpretieren muss oder ob ich einfach nur eine Möglichkeit übersehen habe auf die entsprechenden Inhalte zuzugreifen!?
Grundsätzlich sind die Input-Klassen eigentlich nur Parameter-Wrapper-Container für die Parameter einer FC-Action. Aus diesem Grund solltest du nur in Actions auf den Input - und natürlich auf die übrigen Request-Parameter - zugreifen.

Rein vom Timing solltest du jedoch zu diesem Zeitpunkt im URL-Rewrite-Modus sehrwohl Zugriff auf das geparste $_REQUEST-Array haben. Es sei denn, die Input-Filter werden nicht ausgeführt. Siehe hierzu http://adventure-php-framework.org/Seit ... -Framework.

Was möchtes du denn eigentlich genau erreichen?


Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von MrNiceGuy » 11.07.2009, 14:54:59

Ziel ist es für mein kleines CMS eine FC-Action zu haben, die nicht wie eine normale FC-Action aufgerufen werden muss. Dazu ist es aber erforderlich, dass "normale" GET-Parameter als Action-Parameter genutzt werden können. Sprich:

Statt über domain.tld/var/val/var2/val2/~/modules_mymodules_biz-action/actionname/param1/paramvar1/ möchte ich einfach "nur" domain.tld/var/val/var1/val1/param1/paramvar1/ aufrufen und die registrierte FC-Action soll über die Input-Klasse (wozu sie ja da sein sollte), die Parameter erhalten, die es benötigt. Sprich: Ich suche mit der Input-Klasse die entsprechenden Parameter selbst raus. Vorteil: ich kann ohne großen Aufwand die FC-Action nutzen, ohne komplizierte und unverständliche URLs generieren zu müssen. Für mein CMS etwas schöner, da ich den Content über eine FC-Action bestimme. Oder hast du einen anderen Lösungsansatz, der mir bisher entgangen / entfallen ist?

Ich schaue mal eben nach dem Link, den du mir geschickt hast. Danke schonmal!

EDIT: Ja, ich habe den Registry-Eintrag gesetzt, aber außer "query" ist in $_REQUEST nur die Session-ID enthalten :(

EDIT2: So, ich konnte den "Fehler" zumindest schonmal eingrenzen:

Code: Alles auswählen

<?php
// Debug-Modus
error_reporting (E_ALL);

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

// include page controller
require ('./apps/core/pagecontroller/pagecontroller.php');

// Rewrite-Engine aktivieren
$Reg = &Singleton::getInstance ('Registry');
$Reg->register ('apf::core',
                'URLRewriting',
                TRUE
                );

// FrontController hinzu laden
import ('modules::cms::biz',
        'siteSwitchFrontcontroller'
        );

// FrontController-Instanz erzeugen
$objectSiteSwitch = new siteswitchFrontcontroller ();

// Dauerhafte Frontcontroller-Action definieren
$objectFrontcontroller = &Singleton::getInstance ('Frontcontroller');
$objectFrontcontroller->set ('Context',
                             $objectSiteSwitch->get ('Context')
                             );
$objectFrontcontroller->registerAction ('modules::cms::biz',
                                        'userAccess'
                                        );
$objectFrontcontroller->registerAction ('modules::cms::biz',
                                        'cmsContent'
                                        );

// FrontController starten
$objectSiteSwitch->start ();
?>
Das ist meine index.php und ich habe herausgefunden, dass der Filter garnicht angewandt wird, weil bereits bei der registrierung der Action "cmsContent" die Input-Klasse initialisiert wird. Das heißt: Lange bevor der Input-Filter überhaupt Anwendung findet, wird bereits die Input-Klasse der entsprechenden FC-Action gestartet. Ich weiß nicht, ob das so normal ist oder nicht, aber ich weiß jetzt wenigstens schonmal, warum das alles so passiert!? Im Übrigen hat das Timing-Model keine Auswirkung auf das Verhalten, habe auch pretransform ausprobiert, aber das ging leider genauso wenig...
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von dr.e. » 13.07.2009, 08:02:42

Hallo Lutz,

ich schaue mir das heute Abend mal an. Grundsätzlich sollte es vom Timing her so sein, dass die Filter vor den Actions ausgeführt werden und somit in der Input- und Action-Klasse das $_REQUEST-Array vollständig aufgebaut sein sollte.


Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von MrNiceGuy » 13.07.2009, 16:15:10

Dass es so sein sollte stelle ich auch garnicht zur Debatte, das hatte ich schließlich auch erhofft ;) Fakt ist jedoch, dass eine Testausgabe gezeigt hat, dass die Input-Klasse direkt nach Aufruf der registerAction-Methode ausgeführt wird und zu diesem Zeitpunkt noch kein $_REQUEST vollständig ist.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

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

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von dr.e. » 14.07.2009, 08:02:33

Hallo Lutz,

du hast völlig Recht, die Input-Klassen werden zur Filter-Zeit erzeugt. Hatte das falsch im Kopf. Dies ist deshalb so gewählt, da es sich dabei nur um "Request-Wrapper", sprich um Daten-Objekte handelt.

Das bedeutet also, dass du im Konstruktor keine Logik verpacken kannst, die das $_REQUEST-Array benötigt. Solltest du überhaupt Logik dort verpacken wollen/müssen, muss das zum Zeitpunkt der Ausführung der Action passieren. Dieser Zeitpunkt findet definitiv nach dem Ausführen der Filter statt. Hierzu kannst du der Klasse eigene Methoden geben (z.B. getFoo()) und diese greift dann auf das Request-Array zu. Grundsätzlich sollte IMHO jedoch aus Design-Gründen die Logik in der Action stecken.

Dieses Verhalten würde ich auch nur ungern ändern, da es a) keinen Sinn macht und b) einen tiefen Eingriff in den Front-Controller darstellt.

Ich hoffe das hilft dir weiter?!

Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Zugriff auf Parameter in FCInput-Klassen!?

Beitrag von MrNiceGuy » 14.07.2009, 17:03:52

Ja, es hilft mir weiter. Ich wollte es halt in die Input-Klasse stecken, da die Action eigentlich nur übergebene Parameter nutzen soll und dafür ist ja eigentlich wieder die Input-Klasse zuständig. Aber nach deiner Ausführung werde ich den Part dann halt einfach in die Action übernehmen.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast