Hi,
wenn ich in einem Inhaltselement oder Modul eine eigene kleine Klasse einsetze, wie kann ich aus dieser Klasse heraus die Datenbank oder Log-Funktion ansprechen? Mit $this->... gehts ja logischerweise nicht mehr!
Hi,
wenn ich in einem Inhaltselement oder Modul eine eigene kleine Klasse einsetze, wie kann ich aus dieser Klasse heraus die Datenbank oder Log-Funktion ansprechen? Mit $this->... gehts ja logischerweise nicht mehr!
Musst sie dir holen
PHP-Code:
$this->import('Database');
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Ah du bist komplett ausserhalb
Äh, nicht sonderlich schlau...du bist ausserhalb des Systems. Ich würde halt von Backend erben lassen
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Ist eine Frage von "was willst du nutzen?"
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Ja, kommt ja vielleicht noch mehr dazu Aber hast schon Recht, wenn man's genau nehmen will, dann System
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Der Tipp mit System ist gut. Nur eines fehlt noch, ich muss auch auf die Klasse Environment zugreifen, das scheint mit System nicht zu gehen. Oder kann ich das auch importieren
mit $this->import(Environment); ?
Hi
laut api.https://contao.org wird Environment schon im Konstruktor im importiert und ist dann unter $this->Environment verfügbar.
Gruß b2m
1+1=10
Also bei mir funktioniert es nur wenn ich es zusätzlich mit Import übernehme, habs ausprobiert. Ist die API Doku falsch oder muss ich den Construktur von Systems manuell noch aufrufen? Hier Codeauszug:
Code:class Paypal extends System { public function __construct() { $this->import('Environment'); $this->import('Database'); ... }
Hi
versuche es doch mal mit einem
in deiner __construct().PHP-Code:
parent::__construct();
Gruß b2m
1+1=10
Geht's nicht so?
dann hast du Zugriff:Code:$objEnv = $this->Environment->getInstance();
undCode:string __get (string $strKey) // $Key abfragen
also z.B.Code:void __set (string $strKey, mixed $varValue) // $Key eintragenCode:echo $objEnv->__get('url'); //Rückgabe der aktuellen URL ohne Pfad und Querystring
Geändert von Seitengestalter (31.01.2010 um 06:53 Uhr)
Wenn Null besonders groß ist, ist es fast so groß wie ein bisschen Eins.
Guten Morgen Seitengestalter,
theoretisch geht es auch so, wie du es beschrieben hast. Aber was wenn Leo jetzt beschließen sollte ein anderes Design Pattern zu verwenden, das Singleton für Environment ersetzt oder eine __construct() mit Parametern für Environment definiert?
Dann funktioniert dein Code plötzlich nicht mehr , wohingegen die Lösung mit parent::__construct() (ist glaube ich eine Form des Fabric Patterns) bzw. $this->import('Environment'); auch weiterhin funktionieren wird, da in diesen Fällen das Typolight-Framework für eine korrekte Initialisierung des Objektes sorgt.
Gruß b2m
1+1=10
Moin alle,
also __set() und __get() sind NICHT dafür vorgesehen, direkt aufgerufen zu werden! Es sind magische Methoden, die von PHP aufgerufen werden, wenn eine unbekannte Member-Variable zugegriffen wird. Siehez.B. hier.
Natürlich nur, wenn die Methoden __set/__get 'abc' bzw. 'xyz' auch behandeln.PHP-Code:
// Falsch:
echo $object->__get('abc');
$object->__set('xyz', $some_value);
// Richtig:
echo $object->abc;
$object->xyz = $some_value;
Die eigene Definition eines Konstruktors a la
ist, wenn ich richtig informiert bin, für einige älter PHP 5 Versionen nötig, weil in denen der Konstruktor der Superklasse nicht automatisch aufgerufen wurde, wenn man keinen Konstruktor definiert hatte; ein Bug in diesen Versionen, ich glaube, der wurde in 5.3 gefixt. Jedenfalls erforderlich ist der Aufruf von parent::__construct(), wenn man einen eigenen Konstruktor definiert hat, egal, ob er noch andere Initialisierungen vornimmt, oder nicht.PHP-Code:
public __construct()
{
parent::__construct();
}
LG, Georg
Geändert von deerwood (01.02.2010 um 00:27 Uhr)
Hi Georg,
danke für deine sinnvollen Ergänzungen. Das mit den Gettern und Settern habe ich ganz übersehen
Gruß b2m
1+1=10
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen