php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.12.2011, 17:18  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

@dsentker:
Zitat:
Mh... Schön wäre aber auch ein Zugriff auf das Request-Objekt an sich, um auf die Methode "isInternalRequest()" (HMVC) o.ä. zuzugreifen.
Das ist nur notwendig, wenn du HMVC oder Template-Einbindung per Sub-Request realisierst. Dies ist beim APF beispielsweise nicht so gelöst und darum braucht es das auch garnicht.

Zitat:
Naja. Auch bei HMVC muss der "oberste" Controller zunächst aufgelöst werden, und auch da ist eben die Uri entscheidend.
Sofern er dynamisch gewählt werden soll: ja, ansonsten: nein. In einem APF-Projekt hast du stets ein statisches Haupt-Template, in dem du dann per FC-Action oder Input-Filter bestimmt einen dynamisch gewählten Knoten - mit eben einem dymnamisch evaluierten "obersten" Controller - anzeigst.
Insofern funktioniert HMVC in der Umsetzung des APF unterschiedlich zu deinem Gedankengang. Für meine Begriffe ist hierin genau das Quentchen Flexibilität versteckt, das andere Frameworks nicht haben, da das Url-Layout statisch hinsichtlich der Controller ist.

@Trainmaster:
Zitat:
Wenn ich das beim APF richtig sehe, sind die Informationen in den Templates "versteckt". Ob ich nun anhand der URL-Informationen den zuständigen Controller ermittel, bspw. durch definierte Routen wie bei Symfony 2 (http://symfony.com/doc/2.0/book/routing.html), oder aber es wie im APF löse, halte ich für Geschmackssache. Beide Varianten ermöglichen eine flexible wie dynamische URL-Gestaltung.
So pauschal lässt sich das IMHO nicht formulieren. Der Unterschied ist für mich nicht nur Routing (sf2) vs. "Template-Mapping" (APF), sondern wie mit Url-Layouts umgegangen wird. sf2 und beispielsweise auch das ZF registrieren Routen in einem Router um eine Auflösung zu einem Controller bzw. einem Controller und einer entsprechenden Action durchzuführen. Unter http://symfony.com/doc/2.0/book/rout...under-the-hood ist exakt diese lineare Abbildung besprochen.

Das APF behandelt Urls auf eine andere Weise: die Url wird als Informationsquelle für alle zu einem Zeitpunkt notwendigen Daten gesehen, die zur Wiederherstellung eines Zustands zu exakt diesem Zeitpunkt genutzt werden kann. Ich lege mich also nicht fest, dass ich beispielsweise einen bestimmten Part auf eine Action und wiederum einen anderen auf einen Controller mappen muss - egal ob durch ein weiteres Mapping unterstützt oder nicht -, sondern die Url kann auch eine völlig andere semantische Struktur besitzten. Siehe hierzu auch die Diskussion unter http://www.php.de/software-design/60...-ansatz-2.html (URL-Design für PAC-Ansatz) und http://www.php.de/software-design/56...ing-mvc-5.html (erweitertes Controlling (MVC)).

Essenz der beiden Threads ist, dass ich (und damit die Implementierung im APF ) die Url als beliebige Struktur sehen, die eine äußere und eine innere Repräsentation besitzt und die je nach Applikation und Anwendungsfall auf eine andere Weise interpretiert wird. Weiter ist Bestandteil dieser Überlegungen, dass die Informationen zum Aufbau der internen Applikation-Informationen (im HMVC-Bereich: View-Model) nur zum Teil aus der Url "erreichnet" werden, zum anderen aus der Session oder aus der Datenbank, sofern dies im aktuellen Kontext notwendig ist. Bei einem CMS beispielsweise kannst du aus dem String /2011-the-year-at-a-glance weder den Controller noch andere Dinge erkennen. Das APF geht hierbei davon aus, dass du in einem eigenen Input-Filter die so gelieferte Url in die interne Struktur/Information übersetzt und diese z.B. über eine Front-Controller-Action im View-Model angereichert wird. Aus der obigen Url lässt sich beispielsweise
  • die anzuzeigende Seite mit ihrem Inhalt
  • die Sprache
  • die Inhalte der Slots Header, Content, Footer
Ich hoffe der Unterschied ist nun klar geworden.
__________________
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
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.12.2011, 17:22  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Klingt interessant. Aber wenn es nicht die Uri ist, die einen Controller beschreibt, wer ist es dann? Wie lege ich fest, was beim Aufruf der Uri /foo/bar passiert? Wie kann ich als Entwickler zu einem späteren Zeitpunkt nachvollziehen, was genau bei /baz/qux/ passiert? Was genau ist der Einstiegspunkt einer APF-Anwendung unter Berücksichtigung der Uri?
__________________

Geändert von dsentker (29.12.2011 um 17:27 Uhr).
dsentker ist offline   Mit Zitat antworten
Alt 29.12.2011, 17:46  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

Zitat:
Aber wenn es nicht die Uri ist, die einen Controller beschreibt, wer ist es dann?
Effektiv ist es eine Summe von Informationen. Um beim CMS-Beispiel zu bleiben ist es im "obersten" Knoten (Rahmen-Template) ein statischer Controller, der lediglich die Template-Basics füllt. Vielleicht ist es aber auch kein Controller, da das Rahmen-Template keinen Controller besitzt/braucht.

Zitat:
Wie lege ich fest, was beim Aufruf der Uri /foo/bar passiert?
Die konkreten Controller in den einzelnen Komponenten - um auch hier beim CMS-Beispiel zu bleiben - werden dynamisch mit der Pflege des Redakteurs festgelegt. Es ist also weder die Entwicklung, noch die (statische) Konfiguration, die die Definition ausmacht. Die Url "/foo/bar" könnte demnach als CMS-Seite mit dem Url-Namen "/foo/bar" oder als "foo=bar" interpretiert werden. Deine konkrete Komponente selbst erfährt davon nichts, da das Layout per Input-Filter und FC-Action in eine interne Repräsentation übersetzt wird, die für alle Komponenten verständlich ist (meist Schlüssel=Wert).

Zitat:
Wie kann ich als Entwickler zu einem späteren Zeitpunkt nachvollziehen, was genau bei /baz/qux/ passiert?
Den Mechanismus muss du entweder selbst implementieren - dann kennst du ihn - oder du nutzt einen bereits vorgegebenen, dann gibt es dazu eine Doku. Im APF ist das das Timing-Modell des Front- und Page-Controllers.

Zitat:
Was genau ist der Einstiegspunkt einer APF-Anwendung unter Berücksichtigung der Uri?
Das ist nicht deterministisch definiert. Und zwar nicht etwa, weil das APF einen solchen nicht definieren könnte, sondern weil du die Freiheit hast, einen beliebigen Punkt zu wählen und auch so zu implementieren.

Im Auslieferungszustand ist der Einstiegspunkt einfach die Bootstrap-Datei. Wobei du hier genauer definieren musst, für welchen Bereich der Anwendung. Bezeichnest du als Anwendung eine Komponente News-Anzeige, die irgendwo auf der Seite eingebunden ist, dann ist der Einstiegspunkt der, der zur Anzeige des selben führt. Das kann ein Kenner einer CMS-Seite sein, auf der die Komponente redaktionell eingebunden ist oder ein einzelner Url-Parameter der die Anzeige steuert.
__________________
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 29.12.2011, 17:56  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Okay, das heisst, es gibt keinen festen Ablauf der Komponente in einer APF-Applikation.

Zitat:
Effektiv ist es eine Summe von Informationen. Um beim CMS-Beispiel zu bleiben ist es im "obersten" Knoten (Rahmen-Template) ein statischer Controller, der lediglich die Template-Basics füllt.
Aber irgendwo muss ja beschrieben sein, dass dieser Controller geladen wird. Ich habe die Doku überflogen, aber konnte keinen Hinweis darauf finden, wie ein solcher Einstiegspunkt definiert wird. Irgendwo muss es doch den "Stack-Ablauf" geben, sprich "mache erst dies, dann render das, dann ruf dies auf, dann mach das etc". Auch von der von verschiedenen Komponenten kommt - angestoßen werden muss er ja.
__________________
dsentker ist offline   Mit Zitat antworten
Alt 29.12.2011, 18:19  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Das APF behandelt Urls auf eine andere Weise: die Url wird als Informationsquelle für alle zu einem Zeitpunkt notwendigen Daten gesehen
Was soll das für eine andere Weise sein? Auch Symfony 2 behandelt die Url als Informationsquelle.

Zitat:
Zitat von dr.e. Beitrag anzeigen
die Url als beliebige Struktur sehen, die eine äußere und eine innere Repräsentation besitzt und die je nach Applikation und Anwendungsfall auf eine andere Weise interpretiert wird.
Nichts anderes erledigt der Routing-Mechanismus von SF2. Ich als Entwickler lege fest, welche Informationen aus der URL gewonnen werden können.

Zitat:
Zitat von dr.e. Beitrag anzeigen
Bei einem CMS beispielsweise kannst du aus dem String /2011-the-year-at-a-glance weder den Controller noch andere Dinge erkennen. Das APF geht hierbei davon aus, dass du in einem eigenen Input-Filter die so gelieferte Url in die interne Struktur/Information übersetzt
Hier möchte ich dir glatt widersprechen. Ich kann aus diesem String nicht direkt an einen Controller delegieren, jedoch aber ein Muster erkennen. Dieses Muster definiere ich als Route und der Router übernimmt die "Übersetzungsarbeit".

Wie gesagt, ich möchte weder die eine noch die andere Variante kritsieren. Lediglich geht es mir darum, dass ich mit beiden Vorgehensweisen gleichermaßen flexible und dynamische Anwendungen erstellen kann.
Trainmaster ist offline   Mit Zitat antworten
Alt 29.12.2011, 18:50  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e.
die Url als beliebige Struktur sehen, die eine äußere und eine innere Repräsentation besitzt und die je nach Applikation und Anwendungsfall auf eine andere Weise interpretiert wird.
Auch in meinem Framework ist die Url eine beliebige Struktur, die anhand von Routing-Definitionen aufgelöst wird. Trotzdem ist der Controller weiterhin Ziel und Dreh- und Angelpunkt einer solchen Uri-Auswertung. Wenn ich beim Aufruf einer Uri also das Model/View-Gedöns außen vor lassen möchte und nur eine Mail verschicken will, einen Webservice triggern möchte oder einen JSON-Response benötige, so muss ich hierfür eben trotzdem eine Controller-Action erstellen. Die Routedefinition könnte also lauten "Wenn Uri == 'quz/baz/' dann lade Controller "foo" mit der Methode "bar".
__________________
dsentker ist offline   Mit Zitat antworten
Alt 29.12.2011, 19:43  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

Zitat:
Auch in meinem Framework ist die Url eine beliebige Struktur, [..]
und

Zitat:
Trotzdem ist der Controller weiterhin Ziel und Dreh- und Angelpunkt [..]
wiedersprechen jedoch "meinem" Ansatz und damit einer Abstraktion der Url im Sinne von HMVC. Wenn du das so haben möchtest, wiederspreche ich dir nicht. Ich möchte nur darauf hingewiesen haben, dass es hier einen kleinen aber wichtigen Unterschied gibt.

Zitat:
Wenn ich beim Aufruf einer Uri also das Model/View-Gedöns außen vor lassen möchte und nur eine Mail verschicken will, einen Webservice triggern möchte oder einen JSON-Response benötige, so muss ich hierfür eben trotzdem eine Controller-Action erstellen.
Sofern du plain-MVC und einen Front-Controller, der keine dynamischen und mehrfachen Actions ausführen kannst implementierst, ist das der einzige Weg. Schaltest du einen Front-Controller ein, der Actions basierend auf Url-Anweisungen (beim APF wiederum abstrahiert über einen Input-Filter) ausführen kann, kannst du ein und die selbe Seite bzw. Bootstrap einmal für den einen Anwendungsfall und einmal für den anderen verwenden ohne gedanklich einen Workaround schaffen zu müssen.

Der genannte Mechanismus ist beispielsweise unter http://wiki.adventure-php-framework....APF#Die_Praxis genutzt um sowohl eine einfache Webseite und leichzeitig AJAX-Resourcen über den Front-Controller bereitzustellen.
__________________
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
CSS alphatranzparenz nicht an eingeschlossene container vererben litterauspirna HTML, Usability und Barrierefreiheit 7 03.11.2011 10:57
Dependency Injection Container Anyone PHP-Fortgeschrittene 33 16.06.2011 08:28
jQuery <div> Container generieren lassen ? dreamcatcher JavaScript, Ajax und mehr 5 23.02.2011 14:01
[Erledigt] Mehrere DIV Container mit einem Klick ändern (mit mehreren Request Aufrufe Lebenssonde JavaScript, Ajax und mehr 11 26.08.2010 09:01
Netz von Objekten mit Abhängigkeiten darstellen/zeichnen serPHPico PHP-Fortgeschrittene 12 25.08.2010 18:52
kürzeren div container authoatisch der höhe des contends anpassen litterauspirna HTML, Usability und Barrierefreiheit 15 29.07.2009 00:57
2 div Container immer gleich lang Kein Genie HTML, Usability und Barrierefreiheit 4 27.07.2009 13:38
Links vom Untermenü in Container öffnen Surfer PHP Tipps 2008 0 27.12.2008 19:24
[CSS] Container in Container Igäl HTML, Usability und Barrierefreiheit 5 04.09.2007 11:29
CSS - Bild im div container überlappt andere container Buschdieb HTML, Usability und Barrierefreiheit 13 19.07.2007 23:17
IE6: Container mit Float dabei wird margin doppelt gewertet DonTermi HTML, Usability und Barrierefreiheit 1 11.01.2007 09:02
[Erledigt] Container im Firefox falsch dargestellt HTML, Usability und Barrierefreiheit 27 15.08.2005 23:18
&amp;lt;div&amp;gt;- container vertikal auf seite zentrieren HTML, Usability und Barrierefreiheit 3 08.05.2005 11:16
container mit tabelle rechts aufklappen HTML, Usability und Barrierefreiheit 10 01.04.2005 12:25


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:49 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