dedlfix: OOP Konflikt

Beitrag lesen

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";