php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.02.2010, 12:03  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.071
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Hi,

interessantes Thema. Ich streu hier einfach mal meinen aktuellen Ansatz rein.

Meine .htaccess - Datei für ein Testprojekt sieht aktuell so aus:
Code:
RewriteEngine on

RewriteBase /admin/PHPFrog2/

RewriteRule ^(([a-z0-9_\-\/]+\/)?[a-z0-9_\-]+)\/?$ template.php?href=$1

RewriteRule ^(([a-z0-9_\-\/]+\/)?[a-z0-9_\-]+)\/index([0-9]+)\.html$ template.php?href=$1&p=$2
Die Adressen treten daraufhin folgendermaßen in Erscheinung:
Code:
/ordner/ordner2/foo/bar/
Wobei beim Aufruf noch nicht klar ist, was in der URL für die Auswahl der einzubindenden Datei zuständig ist und was als Parameter durchgeht.

Der Pfad wird also erstmal auseinander genommen und dann wird rekursiv nach einem entsprechenden Datenbankeintrag gesucht, der mir dann wiederum sagt, welche Datei eingebunden wird.

Die Funktion zerlegt den Pfad natürlich anhand der / in Einzelteile und schaut sich dann von hinten nach vorne jedes Element an, ob es in der Datenbank vorkommt. Begonnen wird also, die Beispieladresse oben mal angenommen, mit bar.
Kommt es zu einer Übereinstimmung, ist aber noch nicht gesagt, dass es sich dabei nicht um einen Parameter handeln kann, denn alle weiteren Elemente (ordner, ordner2 und bar) müssten dann jeweils ein Elternteil des nachfolgenden Elements sein.
Sollte also bar kein Parameter sein, müsste es ein Kind von foo sein, welches ein Kind von ordner2 sein müsste und dieses Element müsste wiederum ein Kind von ordner sein.

Befinden sich in der Datenbank also nur 3 Einträge wie:
Code:
id | href    | parentID  | file
1  | ordner  | 0         | seite1
2  | ordner2 | 1         | seite2
3  | foo     | 0         | foo
werden die beiden letzten Elemente foo und bar als Parameter betrachtet, denn bar ist erst gar nicht in der Datenbank vorhanden und foo hat keine Eltern.

Diese Parameter sind dann gleichzeitig Parametername(-schlüssel) und Wert in einem.

Es wird also die Datei seite2.php ausgewählt und eingebunden, da ordner2 in der Datenbank auftaucht und ordner als Elternteil hat.

---------------------------------------------------------------------------------------------

Die von Dr. E. verlinkten Informationen zum URL-Schema finde ich auch sehr interessant. Die Form meiner URLs könnte ich wohl noch an die Form
Code:
/{key1}/{value1}/{key2}/{value2}/
anpassen. Dann wäre ein Parameter nicht mehr Schlüssel und Wert in einem. Allerdings kann ich momentan keinen wirklichen Vorteil dadurch erkennen.

Was passiert z.B., wenn ein Schlüssel fehlt?
Code:
/{key1}/{value1}/{value2}/
Dann würde der eigentliche Wert als Parameterschlüssel erkannt werden und der Parameter wäre leer. Dies würde aber wohl keinen großen Schaden anrichten!?

Zitat:
Zitat von Anyone
Möchte man jedoch vier Aktionen ausführen, dann steht man doch vor einem Problem?
Hmm, wie meinst du das? Warum kannst du ihn nicht hinter Aktion 3 anhängen?
__________________
HalloPHP
Asipak ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.02.2010, 12:15  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Also ich schreibe einfach immer fast alles auf die index.php um und erledige den Kram in PHP, da ist man flexibler und hat nicht etliche rules die sich unter umständen irgendwann in die queere kommen (vor allem hässlich zu testen/debuggen)

RewriteRule !(robots.txt|favicon.ico)$ index.php

in PHP komm ich dann via $_SERVER an den kompletten Pfad und kann damit machen was ich will.
robo47 ist offline   Mit Zitat antworten
Alt 20.02.2010, 12:21  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.071
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Ah, danke, hilft mir weiter!

Jetzt erscheint es mir plötzlich gar nicht mehr sinnvoll, überhaupt auf ein bestimmtes URL-Schema innerhalb der .htaccess zu prüfen. Das kann ich ja alles in PHP erledigen.
__________________
HalloPHP
Asipak ist offline   Mit Zitat antworten
Alt 20.02.2010, 12:36  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

... meine Rede im Post #2!
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 20.02.2010, 12:37  
DerApfel
Gast
 
Beiträge: n/a
Standard

Hallo,

ich hätte noch einen anderen Ansatz. Man trennt sich einfach von dem Directory-Seperator als Abtrennung zwischen den Parametern eines gleichen Typs.

www . example . com / Modul / Aktion1_Aktion2_Aktion3_AktionN/andere_Parameter.

Nun kann man den Aktionen-String per PHP auswerten und dann danach die Aktionen aufrufen. Und erspart sich "etwas" Arbeit in PHP.

Grüße,
Simon

Geändert von DerApfel (20.02.2010 um 12:41 Uhr).
  Mit Zitat antworten
Alt 20.02.2010, 16:54  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Das kann man so machen. Allerdings hast du üblicherweise bei einem Modul nur eine (Front-Controller-)Aktion zu einer Zeit. Das URL-Layout (egal ob nun Trennung per "/" (Rewrite-URL) oder per "&" (Normale URL)) muss daher die Möglichkeit bieten, mehrere Actions mit beliebiger Anzahl von Parametern zu "codieren".

Sofern es um eine konkrete Applikation geht, sollte das Konzept auch die Möglichkeit bieten ein "eigenes" URL-Layout einzusetzen, das explizit auf den Anwendungsfall zugeschnitten ist. Hier ist insbesondere das Thema SEO aktuell. Hierzu sollen vor allem die Keywords einer Applikation in der URL erscheinen, weniger explizite Steuer-Paremeter wie Sprache oder ID der Seite. Hierzu empfiehlt sich dann, das URL-Layout mit einer generischen Front-Controller-Action in die Infortmationen der Applikation zu übersetzen und eine zentrale Komponente zur Generierung der URL vorzusehen, die dieses Schema "kennt". Hierzu hatten wir aber schon zahlreiche Diskussionen im Software-Design-Forum. Z.B. hier (URL-Design für PAC-Ansatz) oder hier (Front-Controller und MVC Verständnisprobleme).
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Default charset für Funktionen MasterQ PHP-Fortgeschrittene 6 06.01.2011 10:03
COM Exception "Typkonflikt" bei array parameter by reference k_m_becker PHP-Fortgeschrittene 6 11.11.2010 20:14
Controller Hierarchie Dark Guardian Software-Design 18 27.10.2009 13:22
[Erledigt] Warning: mysql_result() expects parameter 1 to be resource, boolean given FloRic Datenbanken 8 19.10.2009 20:15
Mehrere Controller auf einer Seite fat32 Software-Design 6 27.07.2009 16:55
parameter von interfaces in klassen richtig mit anwenden? litterauspirna PHP Tipps 2009 27 30.06.2009 20:58
[Erledigt] Parameter in JavaScript übergeben stefanus JavaScript, Ajax und mehr 3 24.09.2008 22:51
Templatesystem mit Funktionen und Variablen drin? BartTheDevil89 PHP Tipps 2008 6 01.07.2008 09:32
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Parameter überschreiben Igäl PHP Tipps 2006 8 04.06.2006 19:55
Variable als optionalen Parameter? Mex PHP Tipps 2006 3 20.04.2006 07:05
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
einen parameter verstecken seven-12 PHP Tipps 2005-2 8 27.07.2005 16:57
Eure Ideen sind gefragt: eigene Funktionen verwalten PHP-Fortgeschrittene 12 17.01.2005 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mehrere controller auf index seite, php controller url überprüfen, controller funktionen

Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum