| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Tutorial: Ein FrontController in PHP im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo, da ich jetzt schon des öfteren hier Threads gelesen wie z.B. diesen oder den hier , hab ich ...
![]() |
| | #1 (permalink) |
| Registriert seit: 17.03.04 ![]() Likes: 2 | Anzeige Hallo, da ich jetzt schon des öfteren hier Threads gelesen wie z.B. diesen oder den hier, hab ich mir gedacht ich schreib mal ein Tutorial wie man sowas lösen könnte. In diesem Tutorial zeig ich euch wie man einen Front Controller, einen AutoLoader und eine ganz kleine Template Klasse in PHP (version 5) schreibt. Zuerst legen wir die Verzeichnisstruktur und die benötigten Dateien an. / | - index.php | - .htaccess | + core | |- FrontController.class.php | |- AutoLoader.class.php | |- Template.class.php | |- Action.class.php |+ modules |+ main |+ actions | |- Main.class.php |+ classes |+templates | |- Main.tpl.php Was wofür ist wird später erklärt. Aber schon mal ein kurzes Vorwort zum core und modules Verzeichnis, im core werden nur wichtige Klassen und Libriers abgelegt. Im modules Verzeichnis werden die eigentlichen "Seiten" der Homepage abgelegt. Dazu aber später mehr. So, jetzt haben wir alle Verzeichnisse und Dateien angelegt die wir brauchen. Beginnen wir also mit der implementierung des Front Controllers. "Liebe Bastelfreunde, ich hab da schon mal was vorbereitet." ;) FrontController.class.php PHP-Code: PHP-Code: .htaccess Code: php_flag register_globals off # Umschreiben der *.html-URLs in entsprechende action-Parameter: RewriteEngine on RewriteRule ^([^/]+)\.html$ index.php?action=$1&mod_rewrite=true [QSA] Ich hoffe mal der eine oder andere kann was damit anfangen. Fragen könnt Ihr ja hier posten oder mir per PM schicken.
__________________ Mfg Basic Avid - Use it or be used! - |
| | |
| | #2 (permalink) |
| Guest Likes: | Schöne Sache, toll gemacht, obwohl ich eigentlich Ruby bevorzugen würde (Nicht dass ich was gegen PHP hätte, aber Ruby ist einfach bequemer^^). Hoffe auf weitere Tutorials^^. mfg JTron |
|
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() | das klingt sehr interessant. kannst du mal die .ht files erläutern? ich bin da leider noch nicht sonderlich fit drin! also was der code macht ist mir klar, aber bitte mal die syntax erläutern...
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #4 (permalink) |
| Themenstarter Registriert seit: 17.03.04 ![]() Likes: 2 | Guten Morgen, hier mal die Erklärung: "php_flag register_globals off" Gibt nur an, dass register_globals ausgeschaltet werden soll. Ich geh jetzt nicht näher drauf ein, da ich glaube Du weisst was das bedeutet. # Umschreiben der *.html-URLs in entsprechende action-Parameter: RewriteEngine on Dieses Zeile schaltet die RewriteEngine ein. RewriteRule ^([^/]+)\.html$ index.php?action=$1&mod_rewrite=true [QSA] Ok, und hier ist die eigentliche Regel: ^([^/]+)\.html$ --> Ist ein ganz normaler Regulärer Ausdruck. ^ Anfang des Regex () Definiert eine Gruppe, auf die man mit $n zugreifen kann [^/] Kein Slash + steht für ein beliebiges Zeichen \.html Am Ende soll ein Punkt und html kommen $ Ende des Regex Wie das dann genau ausschaut, zeig ich Dir an einem Beispiel: main.Main.html wird aufgerufen Unser Regex trifft zu und formt das ganze zu folgender URL um: index.php?action=main.Main&mod_rewrite=true $1 wurde mit der Gruppe in unserem Regex ersetzt. Soweit so gut, nur was passiert wenn wir Parameter übergeben? Genau, Sie werden ignoriert. Deshalb steht am Ende folgendes [QSA] = Query String Append. Jetzt werden auch die Parameter mit angehängt. Der Parameter mod_rewrite=true wird in diesem Tutorial nicht benutzt, man kann Ihn auch weglassen. So, ich hoffe es ist verständlich erklärt.
__________________ Mfg Basic Avid - Use it or be used! - |
| | |
| | #5 (permalink) |
| Member of Honour ![]() | ah vielen dank! aber wenn ich schon das ganze mit htmls mache, wäre es dochschon sinvoller, sämmtliche angaben vor dem .html mit zu verbauen, das wäre für suchmachinen doch sinvoller. zb sowas dann wie seite-1-hier_kommt_der_themen_name.html btw, wie ist das, wenn ich das [^/] rausnehmen und damit die slashes zulasse, würde da automatisch die www.domain.com/seite/2/name_des_themas.html auf die /index.php umgeschrieben oder muss ich da ne spezielle configuration mit vornehmen?
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #6 (permalink) | |
| Themenstarter Registriert seit: 17.03.04 ![]() Likes: 2 | Jein, hier sagen einige dass solche URLs von Google besser geranked werden, andere wiederrum sagen es sei Google egal. Und hier geht es ja nur darum, die Module+Actions auf vernüftige URLs zu bringen. Rufst Du z.B. folgende Seite auf, main.Main.html, wird dem FrontController durch die ModRewrite Rule folgendes übergeben, main.Main, der FrontController kann jetzt nachschauen, ob es ein Modul mit dem Namen "main" und der Action "Main" gibt, und diese starten. Zitat:
Womit aber der Frontcontroller in dieser Version nichts anfangen könnte.
__________________ Mfg Basic Avid - Use it or be used! - | |
| | |
| | #7 (permalink) |
| Member of Honour ![]() | nuja so würde ich dass dann evrwenden, das kannsch mir ja anpassen, das sollte kein problem sein ![]() meine siginfo.de seite soll da nicht so modular werden, da dass ja nur nen privatprojekt ist.
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #8 (permalink) |
| Themenstarter Registriert seit: 17.03.04 ![]() Likes: 2 | Falls es Probleme geben sollte bei der Umstellung, kannst Dich ja melden.
__________________ Mfg Basic Avid - Use it or be used! - |
| | |
| | #9 (permalink) |
| Member of Honour ![]() | ich bin mir noch nicht sicher ob ich deine version hier nutze oder mir das selbst schreibe und ab und zu mir mal ne anregung von dir hole. was sich dabei im übrigen ergbit, warum die exceptions? was genau haben die für vorteile? hab mit denen noch nie gearbeitet
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #10 (permalink) |
| Themenstarter Registriert seit: 17.03.04 ![]() Likes: 2 | Exceptions haben den Vorteil, dass man mit Ihnen eine Saubere Fehlerbehandlung machen kann. Die meisten benutzen die() oder arbeiten mit errorlevels die Sie mit return oder so zurück geben. Was bei OOP aber nicht gerade sehr schön ist. Exceptions sollten vorallem dort geworfen werden, wo man schon von vornherein weiss hier könnte es krachen. Mit Exceptions kannst Du z.B. folgendes machen: PHP-Code:
__________________ Mfg Basic Avid - Use it or be used! - |
| | |
| | #11 (permalink) |
| Registriert seit: 18.03.05 ![]() Likes: 0 | gabs exception auch schon in PHP4? |
| | |
| | #12 (permalink) |
| Themenstarter Registriert seit: 17.03.04 ![]() Likes: 2 | Nö, die sind erst mit PHP5 gekommen.
__________________ Mfg Basic Avid - Use it or be used! - |
| | |
| | #13 (permalink) |
| Member of Honour ![]() | irgendwie... ich bin verwirrt. PHP-Code: es kommt aber: Code: PHP Warning: fopen(gibts nicht): failed to open stream: No such file or directory in E:\asd.php on line 4
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #14 (permalink) | |
| Registriert seit: 18.03.05 ![]() Likes: 0 | Zitat:
| |
| | |
| | #15 (permalink) |
| Member of Honour ![]() | ah, bin selbst drauf gekommen ... my fault!was ist eigentlich der vorteil der instanzierung anstatt der initialisierung via $controller = new Frontcontroller(); ?
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| PHP - Tutorial: Ein FrontController in PHP | Mackz | Programmierung | 0 | 18.03.08 23:10 |
| php pdf Tutorial ? | 007Rene | (Web-) Design und webbasierte Sprachen | 5 | 11.06.07 15:56 |
| Tutorial | silenced | Fun Section | 4 | 30.08.05 23:33 |
| c++ tutorial | Sebastian_1 | Downloads | 4 | 19.04.05 17:49 |