Empfehlungen: Erweiterte Suche

helper mit datenbankzugriff

Unterstützung der Daten-Formatierung in den Views (DRY)

helper mit datenbankzugriff

Beitragvon Molekül » Mo 22. Mär 2010, 12:22

Hallo,

mir schwebt folgendes vor:

Eine Tabelle "texts" mit den wesentlichen Spalten "id" und "text" und ein helper der im view durch Aufruf der id den entsprechenden Text auf die Seite setzt.
Die Texte sind im Grunde statisch und beinhalten kurze Einleitungstexte zum eigentlichen Datenbankinhalt, ich könnte sie also auch direkt ins view schreiben. In einer Tabelle wären sie aber besser wartbar und können auch von unterschiedlichen Usern bearbeitet werden. Der MVC-Ideologie entspricht das wohl nicht, ist es trotzdem vertretbar, oder spricht ernsthaft etwas dagegen? Wie komme ich in einem helper am besten an die Datenbank heran?

Danke!
M.
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x

Re: helper mit datenbankzugriff

Beitragvon Toby » Mo 22. Mär 2010, 22:45

Könntest du mehr über deinen Anwendungsfall schreiben, speziell womit ein Text genau verknüpft ist? Welche(n) Controller gibt es?
Also der "Datenbankinhalt", hast du mehrere DB-Tabellen? Oder willst du für einen Datensatz einen Text haben? Oder für Controller/Actions je einen anderen Text?

a) Bei einem Datensatz wäre es ja easy, neue Spalte "text_id" und fertig.
b) Bei eigenem Text für einen Controller oder eine Action auch, einfach via this->Textmodel->findById($id_des_textes_für_action/controller) holen, bleibt ja immer gleich und kann man direkt in den Controller schreiben

Einen DB-Aufruf in der View-Schicht würde ich vermeiden und ist laut MVC-Ideologie natürlich nicht vertretbar :)

Aber wenn du es trotzdem machen möchtest:
App::import('Model', 'NamedeinesModels');
$Text = &new Text();
$derText = $Text->findById(999);
Toby
 
Beiträge: 1
Registriert: Mo 22. Mär 2010, 22:29

Re: helper mit datenbankzugriff

Beitragvon euromark » Di 23. Mär 2010, 00:24

genau genommen:

$Model = ClassRegistry::init('Model');
$Model->find();

aber ja, definitiv schöner wäre es, durch entsprechende Logik es in MVC struktur zu bringen.
es geht dennoch so - und keiner wird dich davon abhalten wenn du das so als sinnvoll erachtest :)
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: helper mit datenbankzugriff

Beitragvon Molekül » Di 23. Mär 2010, 11:56

Hallo Toby,

danke für deine Antwort.
Toby hat geschrieben:Könntest du mehr über deinen Anwendungsfall schreiben, speziell womit ein Text genau verknüpft ist? Welche(n) Controller gibt es?
Also der "Datenbankinhalt", hast du mehrere DB-Tabellen? Oder willst du für einen Datensatz einen Text haben? Oder für Controller/Actions je einen anderen Text?

a) Bei einem Datensatz wäre es ja easy, neue Spalte "text_id" und fertig.

Nehmen wir an es handelt sich um die klassische Beispielanwendung aus dem o'reilly buch: mehrere Tabellen mit Jobangeboten, Firmen, Users, Groups, ...
Meine Texte haben jetzt weder etwas mit den Jobs oder den Firmen zu tun, sondern enthalten ganz allgemeine Texte, z.B.
id=1, text="Diese Datenbank enthält verschiedene Jobangebote"
id=2, text="Bitte loggen Sie sich ein, um das Jobangebot zu bearbeiten"
id=3, text="Diese Tabelle enthält alle Firmen von denen Jobangebote in unserer Datenbank sind. Bitte beachten Sie dass blablabla"
Natürlich währen die Texte eigentlich am besten direkt im View aufgehoben, sie sind ja statisch und müssen im Normalfall nicht mehr großartig editiert werden. Trotzdem erscheint es mir für meine Anwendung, wo die Texte wohl etwas länger ausfallen und kompliziertere Erklärungen enthalten einfacher sie in einer Datenbank zu haben, damit man sie komfortabel editieren kann, wenn man nach 4 Wochen feststellt, dass die Erklärung für zu viele User unverständlich ist.
Das Ganze ist vielleicht etwas ähnlich zum Fall zur Lokalisierung von mehrsprachigen Datenbanken, bei der alle __('magig_id') strings durch einen entsprechenden msgstr ersetzt werden, der sich in einer Textdatei befindet. Nur das es mir nicht primär um Lokalisierung geht (ich vermute aber derzeit dass es kein großes Problem sein dürfte dieses Konzept auch auf verschiedene Sprachen auszuweiten wenn ich es in Zukunft brauche), und ich keine Textdatei sondern eine Datenbank verwenden möchte.

Toby hat geschrieben:b) Bei eigenem Text für einen Controller oder eine Action auch, einfach via this->Textmodel->findById($id_des_textes_für_action/controller) holen, bleibt ja immer gleich und kann man direkt in den Controller schreiben

Damit hast du in gewisser Hinsicht recht. Nur erscheint es mir leichter wartbar das ganze direkt ins view zu setzten, weil es da logischer hineinpasst. Die __('magig_id') stehen ja auch im view und nicht im controller, und irgendwie ist das ganze sehr ähnlich.

Was ist deine Meinung dazu?

Grüße, M.
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x

Re: helper mit datenbankzugriff

Beitragvon mbrod » Di 23. Mär 2010, 17:50

Wären Elemente eventuell eine Lösung:
http://book.cakephp.org/view/97/Elements
Für jeden Textblock kann man eine eine datei.ctp erstellen, die sich leicht editieren lassen sollte.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: helper mit datenbankzugriff

Beitragvon Molekül » Di 23. Mär 2010, 18:28

mbrod hat geschrieben:Wären Elemente eventuell eine Lösung:
http://book.cakephp.org/view/97/Elements
Für jeden Textblock kann man eine eine datei.ctp erstellen, die sich leicht editieren lassen sollte.

Ich möchte aber ja eben gerade KEINE Datei editieren sondern eine Datenbank ...
Grund: ich kann mir mit einer Minute aufwand die benötigten Dateien backen um die Texte in der Datenbank online zu editieren und auch andere Nutzer können beim editieren der Texte helfen. Diese Möglichkeit habe ich so einfach bei Dateien nicht.
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x


Zurück zu Helper

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast