Ist es für eine Block-Funktion empfehlenswert, eine ResourceModel-Funktion aufzurufen?


7

Ist es für eine Block-Klasse angemessen, Daten über eine Funktion in einer ResourceModel-Klasse abzurufen, anstatt über eine Model-Klasse?
Oder sollte der Block das Modell aufrufen, das den Aufruf dann an das ResourceModel weiterleitet?

Der direkte Wechsel von Block zu ResourceModel ist am einfachsten und vermeidet das Duplizieren möglicher Funktionen. Würden Sie es jedoch als schlechte Form betrachten und Best-Practice-Muster brechen?

Antworten:


3

Das ist durchaus akzeptabel. Abgesehen von der Instanziierung von Ressourcenmodellen in Controllern soll dies tatsächlich so funktionieren. Ein Ressourcenmodell ist ein spezieller Modelltyp in Magento, der seine Daten aus einer Datenquelle auffüllt.

Wenn Sie den Magento-Kern untersuchen, werden Sie viele Fälle der Verwendung von Ressourcenmodellen in Blöcken sehen. Oft merkt man nicht, dass das passiert, weil dies oft so geschrieben ist:

Mage::getModel('catalog/product')->getCollection();

Die Methode eines Blocks stellt es der Vorlage zur Verfügung, um sie zu verwenden - normalerweise zum Iterieren.


1
Danke für deine Antwort. Ich glaube, ich verstehe dich, aber was ist mit Mage::getResourceModel('log/visitor')->getStartOfLog() einem Block? Würde das nicht die (Domänen-) Modellschicht umgehen?
Freitag,

3

Theoretisch denke ich, dass es eine schlechte Form ist, weil jemand die Ressourcenmodellklasse hätte ändern können (sehr unwahrscheinlich). Aber es kommt darauf an. Ein praktisches Beispiel sind die Kategorie- und Produktressourcenmodelle (und Ressourcensammlungen). Wenn Sie sie direkt instanziieren, erhalten Sie möglicherweise nicht das entsprechende Modell (flach oder normal). Ich denke, das ist der einzige Fall, in dem es tatsächlich darauf ankommt.


Stimmen Sie zu, dass es sich wahrscheinlich eher um theoretisch Puristen als um alltägliche Pragmatiker handelt.
Freitag,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.