echo $begrüßung;
So hab ich das jetzt gelöst, ich hoffe all deine Ratschläge wurden umgesetzt.
Hmm, manche Sachen überliest du einfach konsequent obwohl ich sie mitunter mehrfach erwähne und dann:
Allerdings habe ich ein Problem.
Und das tut ja nun nicht not.
Lass das Querystring-Handling aus dem Router komplett raus. POST und GET sollen Nutzdaten transportieren. Für Routing-Zwecke wollen wir sie nicht verwenden. Der FrontController/Router soll auch nicht entscheiden oder wissen müssen, aus welcher Quelle (POST oder GET) die Nutzdaten kommen. Das muss allein die Action wissen, die die Daten benötigt.
# Sonstige Parameter parse\_str($uri\_params[1], $misc); $params[]=$misc;
Der Teil fliegt raus. Und wenn eine Action $_GET oder $_POST oder sonst eine Quelle auswerten will, soll sie das selbst machen.
Damit löst sich dein Problem auf, weil nur noch die Pfad-Parameter übertragen werden müssen und das ist ein einfaches Array, welches von call_user_func_array() in einzelne Funktionsargumente umgesetzt wird.
Noch eine kleine Korrektur:
# Wichtige Parameter $main=array\_slice($uri, 2); $params[]=$main;
wird zu
$params = array_slice($uri, 2);
und dann ist es schon fast perfekt.
So sieht die Action im Controller aus - und was gibt der Drecksack mir aus?
array(2) { [0]=> string(3) "cat" [1]=> string(1) "5" }
call_user_func_array() übersetzt das Array in einzelne Parameter. Wenn du ein Array hast
$params = array('foo', 'bar');
dann erhältst du mit call_user_func_array('qux', $params) für
function qux($arg1, $arg2) {...}
'foo' in $arg1 und 'bar' in $arg2.
Umgesetzt auf mein Beispiel hattest du statt 'foo' und 'bar' jeweils ein Array und hast nur $arg1 ausgewertet.
Die URL dazu sieht so aus:
http://localhost/Newsletter/run/cat/5/?test=okay
Welche Bedeutung überträgt cat? Wenn die 5 bereits die Kategorien-ID ist, dann ließe ich den cat-Teil weg (=> /Newsletter/run/5?test=okay) und schriebe
public function run($catID) {
machWasMitKategorie($catID);
machWasAnderesMit($_GET['test']);
}
echo "$verabschiedung $name";