php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.12.2011, 16:13  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] DI-Container / Referenzübergabe am Beispiel von sf2

Hallo,

hier steht beschrieben, wie Symfony2 beim Service Container Referenzen auf andere Services handhabt.

Die gezeigte Konfiguration sieht vor, dass ein MethodCall erfolgen soll, um den Mailer zu übergeben. Nun ist meine Frage: Unter welchen Umständen wird die Übergabe, wie in der Config beschrieben, durchgeführt? Erfolgt sie bereits, wenn ich irgendwo schreibe
PHP-Code:
$m = new NewsletterManager() 
? Oder erfordert es, dass ich für das Instanziieren des NewsletterManagers den Service Container verwende?
PHP-Code:
$m $this->get('newsletter_manager.class'); 
Eigentlich macht ja nur der 2. Fall Sinn (der 1. ist wohl technisch nicht machbar). Aber das würde doch, wenn man weiterdenkt, bedeuten, dass jeglicher "Service" über den Manager instanziiert wird? Wird etwa ein neues Request-Objekt erzeugt, würde ich das ja am besten auch mit Hilfe des Service Containers tun?
__________________
dsentker ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 27.12.2011, 17:54  
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

Das kann nur in der zweiten Version funktionieren, da dein Service die Abhängigkeit nicht kennt, sondern nur der Container (inversion of control Prinzip).

Zitat:
Aber das würde doch, wenn man weiterdenkt, bedeuten, dass jeglicher "Service" über den Manager instanziiert wird?
IMHO nur sofern notwendig.

Zitat:
Wird etwa ein neues Request-Objekt erzeugt, würde ich das ja am besten auch mit Hilfe des Service Containers tun?
Das bezweifle ich, denn ein (allgemeingültiger) Request sollte tunlichst keine Abhängigkeiten zu deinen (Anwendungs-spezifischen) Services haben.
__________________
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 27.12.2011, 19:07  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Das bezweifle ich, denn ein (allgemeingültiger) Request sollte tunlichst keine Abhängigkeiten zu deinen (Anwendungs-spezifischen) Services haben.
Schon klar - aber was ist, wenn ein anwendungsspezifischer Service abhängig vom Request ist?
__________________
dsentker ist offline   Mit Zitat antworten
Alt 27.12.2011, 20:41  
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

Dann muss der Request in den Service injiziert werden und nicht umgekehrt. Die Richtung der Abhängigkeit folgt immer der natürlichen Ordnung!
__________________
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 27.12.2011, 21:13  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Dann muss der Request in den Service injiziert werden und nicht umgekehrt. Die Richtung der Abhängigkeit folgt immer der natürlichen Ordnung!
Aber nach meinem Verständnis geht dies nur, wenn der Request Teil des Service Containers ist. Wie sonst soll der Service Container den Request dem konkreten Service übergeben, wenn dieser doch keine Ahnung vom aktuellen Request hat?
__________________
dsentker ist offline   Mit Zitat antworten
Alt 27.12.2011, 21:58  
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

Das Beispiel ist etwas zu komplex für deinen Anwendungsfall, da der Request eine Sonder-Stellung besitzt. Er ist veränderlich und Benutzer-abhängig, was ein Service zunächst nicht ist. Er wird zwar mit Inhalten aus einerm Request oder einer Session gefüttern, jedoch nicht im Sinne eines DI/IoC-Containers.

Für den konkreten Anwendungsfall Request würdest du immer eine entsprechende Methode an deinem Service modellieren, der als Parameter den Request-Inhalt übergeben bekommt. Den Request als Service zu bezeichnen/zu modellieren und per ID/IoC zu injizieren halte ich für übertrieben und nicht gangbar.
__________________
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, 10:55  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Okay, aber wie könnte dann ein externer Service auf den Request zugreifen? Oder auf andere Elemente, etwa das Ergebnis des Routings?
__________________
dsentker ist offline   Mit Zitat antworten
Alt 29.12.2011, 13:26  
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:
Okay, aber wie könnte dann ein externer Service auf den Request zugreifen?
Das bleibt dir letztlich selbst überlassen. Beim APF bin ich den Standard-PHP-Weg gegangen und lasse den Entwickler auf $_GET/$_POST/$_REQUEST herumturnen.

Zitat:
Oder auf andere Elemente, etwa das Ergebnis des Routings?
Im Wesentlichen ist entscheidend, welche Art von Routing du nutzt. Am Beispiel von ZF/sf2 handelt wird Routing genutzt um aus der Url den aufzurufenden Controller und dessen Action zu extrahieren. Setzt du beispielsweise auf HMVC und dynamische Url-Layouts, so ist ein Routing in diesem "klassischen" Sinn nicht notwendig.

Als Lösung im "klassischen" Sinn kann hier entweder ein eigenes RoutingResult-Objekt als Singleton zur Verfügung stehen oder die Parameter werden in $_GET/($_POST/)$_REQUEST eingebettet - etwa mit speziellen Parametern.
__________________
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, 13:35  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Das bleibt dir letztlich selbst überlassen. Beim APF bin ich den Standard-PHP-Weg gegangen und lasse den Entwickler auf $_GET/$_POST/$_REQUEST herumturnen.
Mh... Schön wäre aber auch ein Zugriff auf das Request-Objekt an sich, um auf die Methode "isInternalRequest()" (HMVC) o.ä. zuzugreifen.

Zitat:
Im Wesentlichen ist entscheidend, welche Art von Routing du nutzt. Am Beispiel von ZF/sf2 handelt wird Routing genutzt um aus der Url den aufzurufenden Controller und dessen Action zu extrahieren. Setzt du beispielsweise auf HMVC und dynamische Url-Layouts, so ist ein Routing in diesem "klassischen" Sinn nicht notwendig.
Naja. Auch bei HMVC muss der "oberste" Controller zunächst aufgelöst werden, und auch da ist eben die Uri entscheidend.

Zitat:
Zitat von dr.e. Beitrag anzeigen
Als Lösung im "klassischen" Sinn kann hier entweder ein eigenes RoutingResult-Objekt als Singleton zur Verfügung stehen oder die Parameter werden in $_GET/($_POST/)$_REQUEST eingebettet - etwa mit speziellen Parametern.
iiiih

Ich überleg mir was - war ja meine Entscheidung, ein Framework zu basteln
Danke für die Hilfe.
__________________
dsentker ist offline   Mit Zitat antworten
Alt 29.12.2011, 16:18  
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
Am Beispiel von ZF/sf2 handelt wird Routing genutzt um aus der Url den aufzurufenden Controller und dessen Action zu extrahieren. Setzt du beispielsweise auf HMVC und dynamische Url-Layouts, so ist ein Routing in diesem "klassischen" Sinn nicht notwendig.
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.
Trainmaster 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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php di-container ablauf, di container beispiel

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