switch(@$\_REQUEST['view']){
case 'showNews':
// Newsseite anzeigen
case 'showRegisterForm':
// Anmeldeformular anzeigen
case ...
// usw...
default:
// Startseite anzeigen
}
Ich denke mal, dass das Beispiek einigermaßen verständlich ist: user klickt auf einen Link innerhalb der Website und über den Parameter „view“ wird auf der index.php die entsprechende Seite generiert. Zum Beispiel über eine Template-Engine.
Anfangs habe ich mir gedacht, zuerst über
isset($\_REQUEST['view'])
abzufragen, ob irgendein Link gedrückt wurde. Wenn ja, dann wird in den „Switch“-Bereich gegangen - wenn nicht wird die Startseite generiert.
Aber meiner Meinung ist obige Variante (alles in einer Switch-Anweisung unterbringen und den Fehler wenn kein Parameter übergeben wurde mit „@“ zu unterdrücken) doch besser und übersichtlicher?!
Oder was meint ihr?! Bzw. gibt es irgendwelche Fälle, die ich nicht beachtet habe?
ich mache es normalerweise so, dass ich alle möglichen locations in einem array definiere, also:
$locations = array ( '' =\> 'inc/default.php',
'shownews' =\> 'inc/news.php',
'showregisterform' =\> 'inc/showregisterform.php',
'shownews' =\> 'inc/news.php',
'shownews' =\> 'inc/news.php');
//
// dann überprüfe ich, ob die "location" gültig ist
if (isset($\_REQUEST['view']) && isset($locations[$\_REQUEST['view']]))
$view = $\_REQUEST['view'];
else
$view = '';
//
// danach wird noch die seite eingebunden
include($locations[$view]);
die methode find ich am übersichtlichen, außerdem hab ich einen persönlichen, unbegründeten und mir selbst unerklärbaren hass auf switch/case.
my 2 cent
stefan
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Möchte aber bevor ich die Seite aufrufe, bzw. einbinde noch einen entsprechenden Code ausführen. Und das ist mit deiner Variante ja eher nicht möglich…
Zum Beispiel:
Anzeige einer dynamischen Sporttabelle (Fussball-Bundesliga o.ä). Der User klickt auf den Link. In der index.php wird in den ehtsprechenden switch-case-Block (ich weiss, ich weiss du magst das nicht gesprungen. Dort wird dann per „include“ ein PHP-Skript eingebunden, von einer Klasse ein Objekt instanziert und zum dann z.B. „$table->getTable(‚Heimtabelle‘)“ aufgerufen. Der Rückgabewert wird dann an eine entsprechende Template-Engine übergeben.
Anliegen:
Ich möchte in eine etwas komplexere Website endlich mal eine Art Architektur bringen. Die index.html soll als „Controller“ dienen. Je nach übergebenen Parametern wird aus einem externen PHP-Skript eine Funktion, bzw. Methode einer Klasse aufgerufen. Die zurückgebenen Werte sollen dann über eine Template-Engine in der entsprechenden „View“ angezeigt werden.
Vielleicht hat ja jemand sowas in der Art schon realisiert, bzw. macht so was (in der Art) gerade und ist an einem Gedankenaustausch interessiert.
ich mache es normalerweise so, dass ich alle möglichen
locations in einem array definiere, also:
//
// dann überprüfe ich, ob die „location“ gültig ist
if (isset($_REQUEST[‚view‘]) &&
isset($locations[$_REQUEST[‚view‘]]))
$view = $_REQUEST[‚view‘];
else
$view = ‚‘;
//
// danach wird noch die seite eingebunden
include($locations[$view]);
die methode find ich am übersichtlichen, außerdem hab ich
einen persönlichen, unbegründeten und mir selbst unerklärbaren
hass auf switch/case.
Dort wird dann per „include“
ein PHP-Skript eingebunden, von einer Klasse ein Objekt
instanziert und zum dann z.B.
„$table->getTable(‚Heimtabelle‘)“ aufgerufen. Der
Rückgabewert wird dann an eine entsprechende Template-Engine
übergeben.
objektinstanzierung etc. mach ich eben alles im include. ich habe also nicht nur für unterseiten php-files, die ich reinhole, sondern auch für einzelne seitenteile (wie zb. sich wiederholende blöcke, …). das geht ganz gut. meine index.php hat ca. 10 zeilen, in denen nur die gewünschten seiten includiert und etwas output buffering gehandelt wird … sogar völlig unterschiedliche seitenbereiche lassen sich unter einen hut bringen … sauberer hab ich ein projekt selten abgezogen …
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Der xml-Parser, den ich verwende, schmeißt z.B. unschöne Fehlermeldungen, wenn er ungültiges XML erhält.
Den ruf ich immer mit „@“ auf. Da der bei Fehlern auch false zurückliefert, kann ich trotzdem eine Fehlerbehandlung durchführen - aber schön formatiert.
Gruß
Patrick
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]