Development

Documentation/de_DE/book/1.0/14-Generators (diff)

You must first sign up to be able to contribute.

Changes between Version 7 and Version 8 of Documentation/de_DE/book/1.0/14-Generators

Show
Ignore:
Author:
Jan.Kunzmann (IP: 87.234.70.169)
Timestamp:
03/13/08 00:26:02 (10 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/de_DE/book/1.0/14-Generators

    v7 v8  
    11'''ARBEITSENTWURF ROHÜBERSETZUNG / TRANSLATION WORKING DRAFT'''[[BR]] 
    22Originaldokument: http://svn.symfony-project.com/doc/trunk/book/14-Generators.txt, Version 6117 vom 2007-11-20[[BR]] 
    3 Übersetzungsfortschritt: 70%[[BR]] 
     3Übersetzungsfortschritt: 80%[[BR]] 
    44Übersetzung: JK[[BR]] 
    55Korrekturfortschritt: 0%[[BR]] 
    7979        created_at: 
    8080 
    81 Figure 14-1 - Beispiel-Datenmodell 
     81Abbildung 14-1 - Beispiel-Datenmodell 
    8282 
    8383![Beispiel-Datenmodell](/images/book/F1401.png "Beispiel-Datenmodell") 
    202202Das Look'n'Feel eines so erzeugten Moduls, wie die Abbildungen 14-5 und 14-6 zeigen, ist ausreichend, damit es Out-of-the-Box in kommerziellen Anwendungen einsatzfähig ist. 
    203203 
    204 Figure 14-5 - `list`-View des Moduls `artikel` in der Anwendung `backend` 
     204Abbildung 14-5 - `list`-View des Moduls `artikel` in der Anwendung `backend` 
    205205 
    206206![list-View des Moduls artikel in der Anwendung backend](/images/book/F1405.png "list-View des Moduls artikel in der Anwendung backend") 
    207207 
    208 Figure 14-6 - `edit`-View des Moduls `artikel` in der Anwendung `backend` 
     208Abbildung 14-6 - `edit`-View des Moduls `artikel` in der Anwendung `backend` 
    209209 
    210210![edit-View des Moduls artikel in der Anwendung backend](/images/book/F1406.png "edit-View des Moduls artikel in der Anwendung backend") 
    313313    > symfony propel-init-admin backend kommentar Kommentar 
    314314 
    315 Figure 14-7 - Der Spickzettel für den Administrations-Generator 
     315Abbildung 14-7 - Der Spickzettel für den Administrations-Generator 
    316316 
    317317![Der Spickzettel für den Administrations-Generator](/images/book/F1407.png "Der Spickzettel für den Administrations-Generator") 
    431431Der hieraus resultierende `list`-View des `artikel`-Moduls ist in Abbildung 14-10 zu sehen. 
    432432 
    433 Figure 14-10 - Selbstdefiniertes Feld im `list`-View des `artikel`-Moduls 
     433Abbildung 14-10 - Selbstdefiniertes Feld im `list`-View des `artikel`-Moduls 
    434434 
    435435![Selbstdefiniertes Feld im list-View des artikel-Moduls](/images/book/F1410.png "Selbstdefiniertes Feld im list-View des artikel-Moduls") 
    458458          display:        [id, artikel_link, inhalt] 
    459459 
    460 Figure 14-11 - Selbstdefiniertes Feld im `list`-View des `kommentar`-Moduls 
     460Abbildung 14-11 - Selbstdefiniertes Feld im `list`-View des `kommentar`-Moduls 
    461461 
    462462![Selbstdefiniertes Feld im list-View des kommentar-Moduls](/images/book/F1411.png "Selbstdefiniertes Feld im list-View des kommentar-Moduls") 
    577577          display:    [artikel_link, =inhalt] 
    578578 
    579 Figure 14-14 - Den Link zum `edit`-View auf ein anderes Feld setzen, im `list`-View des Moduls `kommentar` 
     579Abbildung 14-14 - Den Link zum `edit`-View auf ein anderes Feld setzen, im `list`-View des Moduls `kommentar` 
    580580 
    581581![Den Link zum edit-View auf ein anderes Feld setzen, im `list`-View des Moduls kommentar](/images/book/F1414.png "Den Link zum edit-View auf ein anderes Feld setzen, im `list`-View des Moduls kommentar") 
    592592          display:  [created_at, autor, inhalt] 
    593593 
    594 Figure 14-15 - Gestapeltes Layout im `list`-View des Moduls `kommentar` 
     594Abbildung 14-15 - Gestapeltes Layout im `list`-View des Moduls `kommentar` 
    595595 
    596596![Gestapeltes Layout im list-View des Moduls kommentar](/images/book/F1415.png "Gestapeltes Layout im list-View des Moduls kommentar") 
    612612          display:  [created_at, autor, inhalt] 
    613613 
    614 Figure 14-16 - Filter für den `list`-View des Moduls `kommentar` 
     614Abbildung 14-16 - Filter für den `list`-View des Moduls `kommentar` 
    615615 
    616616![Filter für den list-View des Moduls kommentar](/images/book/F1416.png "Filter für den list-View des Moduls kommentar") 
    650650          filters:    [artikel_id, autor, created_at] 
    651651 
    652 Figure 14-17 - Filtern von leeren `autor`-Werten ermöglichen 
     652Abbildung 14-17 - Filtern von leeren `autor`-Werten ermöglichen 
    653653 
    654654![Filtern von leeren autor-Werten ermöglichen](/images/book/F1417.png "Filtern von leeren autor-Werten ermöglichen") 
    683683Die erzeugte Administration kann auch mit großen Tabellen sehr effektiv umgehen, da der `list`-View standardmäßig Paginierung verwendet. Wenn die tatsächliche Anzahl der Zeilen in einer Tabelle die maximalen Zeilen auf einer Seite überschreitet, werden am Ende der Liste Paginierungs-Elemente eingeblendet. Abbildung 14-19 zeigt eine Kommentarliste mit sechs Testeinträgen in der Tabelle, wobei auf der Seite ein Limit von fünf Kommentaren besteht. Die Paginierung sort dabei für eine gute Performanz, da letztlich nur die angezeigten Zeilen aus der Datenbank gelesen werdne, und für eine gute Usability, da selbst Tabellen mit Millionen von Datensätzen durch ein Administrationsmodul verwaltet werden können. 
    684684 
    685 Figure 14-19 - Paginierungs-Elemente erscheinen bei langen Listen 
     685Abbildung 14-19 - Paginierungs-Elemente erscheinen bei langen Listen 
    686686 
    687687![Paginierungs-Elemente erscheinen bei langen Listen](/images/book/F1419.png "Paginierungs-Elemente erscheinen bei langen Listen") 
    703703### Anpassung des Edit-Views 
    704704 
    705 In einem 'edit'-View kann der Benutzer den Wert jeder Spalte eines Datensatzes ändern. Symfony ermittelt die Art der anzuzeigenden Eingabebox anhand des Datentyps der Spalte. Dann erzeugt es einen `object_*_tag()`-Helfer und übergibt diesem Helfer das Objekt und die zu editierende Eigenschaft. Wenn beispielsweise die Konfiguration des `edit`-Views zu einem Artikels festlegt, dass der User das Feld `titel` bearbeiten kann: 
     705In einem `edit`-View kann der Benutzer den Wert jeder Spalte eines Datensatzes ändern. Symfony ermittelt die Art der anzuzeigenden Eingabebox anhand des Datentyps der Spalte. Dann erzeugt es einen `object_*_tag()`-Helfer und übergibt diesem Helfer das Objekt und die zu editierende Eigenschaft. Wenn beispielsweise die Konfiguration des `edit`-Views zu einem Artikels festlegt, dass der User das Feld `titel` bearbeiten kann: 
    706706 
    707707        edit: 
    799799 
    800800Wenn Ihr Schema Relationen zwischen Tabellen definiert, können die erzeugten Administrationsmodule daraus Nutzen ziehen und weitergehende Eingabemöglichkeiten anbieten, durch welche sich die Verwaltung von Relationen stark vereinfacht. 
     801 
     802#### 1:n-Beziehungen (One-to-Many) 
     803 
     8041:n-Beziehungen werden vom Administrationsgenerator berücksichtigt. Wie bereits weiter oben in Abbildung 14-1 gezeigt, ist die Tabelle `blog_kommentar` über das Feld `artikel_id` mit der Tabelle `blog_artikel` verknüpft. Wenn Sie das Modul für die Klasse `Kommentar` mit dem Administrationsgenerator initialisieren, zeigt die Action `kommentar/edit` das Feld `artikel_id` als Dropdown-Liste mit den IDs der verfügbaren Datensätze aus der Tabelle `blog_artikel` an (dies ist weiter oben in Abbildung 14-9 zu sehen). 
     805 
     806Definieren Sie dann zusätzlich eine `__toString()`-Methode in der Klasse `Artikel`, wird deren Rückgabewert für die Optionswerte der Dropdown-Liste verwendet anstelle der Primärschlüssel. 
     807 
     808Wenn Sie im `artikel`-Modul eine Liste der Kommentare zu einem Artikel anzeigen wollen (n:1-Beziehung), müssen Sie dieses Modul durch ein Partial-Feld anpassen. 
     809 
     810#### m:n-Beziehungen (Many-to-Many) 
     811 
     812Auch m:n-Beziehungen kann Symfony berücksichtigen. Da Sie diese allerdings nicht im Schema definieren können, müssen Sie einige Parameter in `generator.yml` angeben. 
     813 
     814Die Implementierung von m:n-Beziehungen benötigt eine Zwischentabelle. Wenn beispielsweise zwischen den Tabellen `blog_artikel` und `blog_autor` eine m:n-Beziehung besteht (ein Artikel kann von mehr als einem Autor geschrieben werden und ein Autor kann offensichtlich mehr als einen Artikel schreiben), wird Ihre Datenbank auf jeden Fall eine Tabelle namens `blog_artikel_autor` oder so ähnlich enthalten, wie in Abbildung 14-20 zu sehen. 
     815 
     816Abbildung 14-20 - Verwendung einer "Zwischentabelle" zur Implementierung von m:n-Beziehungen 
     817 
     818![Verwendung einer "Zwischentabelle" zur Implementierung von m:n-Beziehungen](/images/book/F1420.png "Verwendung einer Zwischentabelle zur Implementierung von m:n-Beziehungen") 
     819 
     820Das Modell hat somit eine Klasse namens `ArtikelAutor`, und dies ist auch schon alles, was der Administrationsgenerator benötigt - Sie müssen das nur im Parameter `through_class` angeben. 
     821 
     822Wenn Sie `generator.yml` wie in Listing 14-30 verändern, dann fügen Sie im generierten Modul der Klasse `Artikel` ein Feld hinzu, um neue m:n-Verbindungen mit der Klasse `Autor` zu erzeugen. 
     823 
     824Listing 14-30 - Umgang mit m:n-Beziehungen mit dem Parameter `through_class` 
     825 
     826        edit: 
     827          fields: 
     828            artikel_autor: { type: admin_double_list, params: through_class=ArtikelAutor } 
     829 
     830Ein derartiges Feld betrifft Verbindungen zwischen existierenden Objekten, weshalb eine normale Dropdown-Liste dafür nicht ausreicht. Sie müssen eine spezielle Eingabemethode dafür verwenden. Symfony bietet drei Widgets an, die helfen, Objekte aus zwei Listen zu verbinden (siehe Abbildung 14-21) 
     831 
     832  * `admin_double_list` besteht aus zwei Listen, zwischen denen sich zwei Knöpfe befinden, um Elemente aus der ersten Liste (verfügbare Einträge) in die zweite (gewählte Einträge) zu verschieben. 
     833  * `admin_select_list` ist eine Liste, in welcher Sie mehrere Einträge auswählen können. 
     834  * `admin_check_list` ist eine Liste aus Checkboxen. 
     835 
     836Abbildung 14-21 - Verfügbare Schnittstellen-Elemente für m:n-Beziehungen 
     837 
     838![Verfügbare Schnittstellen-Elemente für m:n-Beziehungen](/images/book/F1421.png "Verfügbare Schnittstellen-Elemente für m:n-Beziehungen") 
     839 
     840### Interaktionen hinzufügen 
     841 
     842Die Administrationsmodule ermöglihcen es den Anwendern, die üblichen CRUD-Operationen durchzuführen; Sie können jedoch auch Ihre eigenen Interatktionen hinzufügen oder die möglichen Interaktionen für den View einschränken. Die Definition aus Listing 14-31 ermöglicht beispielweise Zugriff auf die standardmäßigen CRUD-Aktionen des Moduls `aritkel`. 
     843 
     844Listing 14-31 - Interaktionen für jeden View definieren, in `backend/modules/artikel/config/generator.yml` 
     845 
     846        list: 
     847          title:          Liste aller Artikel 
     848          object_actions: 
     849            _edit:         ~ 
     850            _delete:       ~ 
     851          actions: 
     852            _create:       ~ 
     853 
     854        edit: 
     855          title:          Inhalt des Artikels %%titel%% 
     856          actions: 
     857            _list:         ~ 
     858            _save:         ~ 
     859            _save_and_add: ~ 
     860            _delete:       ~ 
     861 
     862Im `list`-View gibt es Einstellungen für zwei Gruppen von Actions: zum einen die Actions, die auf jedes Objekt anwendbar sind, und zum anderen diejenigen, die sich auf die ganze Seite beziehen. Die Listen-Interaktionen aus Listing 14-31 stellen sich wie in Abbildung 14-22 gezeigt dar. Jede Zeile enthält jeweils einen Button zum Editieren des Datensatzes und einen zum Löschen. Am Ende der Liste ermöglicht ein weiterer Button das Anlegen eines neuen Datensatzes. 
     863 
     864Abbildung 14-22 - Interaktionen im `list`-View 
     865 
     866![Interaktionen im list-View](/images/book/F1422.png "Interaktionen im `list`-View") 
     867 
     868Da im `edit`-View immer nur ein Datensatz bearbeitet werden kann, kann auch nur eine Gruppe von Aktionen definiert werden. Die Editier-Interaktionen aus Listing 14-31 stellen sich wie in Abbildung 14-23 gezeigt dar. Sowohl die Action `save` als auch `save_and_add` speichern die aktuellen Veränderungen im Datensatz, allerdings zeigt `save` nach dem Speichern wieder den `edit`-View mit dem aktuellen Datensatz an, während `save_and_add` einen leeren `edit`-View zeigt, mit dem Sie einen neuen Datensatz hinzufügen können. Die Action `save_and_add` ist ein praktischer Shortcut, wenn Sie mehrere Datensätze in schneller Abfolge eingeben wollen. Anzumerken ist noch, dass die Position des Buttons für die Action `delete` räumlich von den anderen getrennt ist, damit die Benutzer nicht versehentlich darauf klicken. 
     869 
     870Dass die Namen der Interaktionen mit einem Unterstrich (`_`) beginnen, zeigt Symfony, dass die Standard-Icons und -Actions für diese Interaktionen verwender werden sollen. Der Administrationsgenerator versteht die Werte `_edit` (Bearbeiten), `_delete` (Löschen), `_create` (Erzeugen), `_list` (Auflisten), `_save` (Speichern) und `_save_and_add` (Speichern und erzeugen). 
     871 
     872Abbildung 14-23 - Interaktionen im `edit`-View 
     873 
     874![Interaktionen im edit-View](/images/book/F1423.png "Interaktionen im edit-View") 
     875 
     876Sie können natürlich auch eigene Interaktionen hinzufügen, sofern Sie einen Namen verwenden, der nicht mit einem Unterstrich beginnt, wie in Listing 14-32 gezeigt. 
     877 
     878Listing 14-32 - Definition von eigenen Interaktionen 
     879 
     880        list: 
     881          title:          Liste aller Artikel 
     882          object_actions: 
     883            _edit:          - 
     884            _delete:        - 
     885            neuerkommentar: { name: Kommentar hinzufügen, action: neuerKommentar, icon: backend/neuerkommentar.png } 
     886 
     887Zu jedem Artikel in der Liste wird nun auch ein Knopf mit `web/images/neuerkommentar.png` eingeblendet, wie in Abbildung 14-24 gezeigt. Sobald man ihn anklickt, wird die Action `neuerKommentar` im aktuellen Modul aufgerufen. Der Primärschlüssel des aktuellen Objekts wird automatisch zu den Requestparametern hinzugefügt. 
     888 
     889Abbildung 14-24 - Eigene Interaktion im `list`-View 
     890 
     891![ Eigene Interaktion im list-View](/images/book/F1424.png "Eigene Interaktion im list-View") 
     892 
     893Die Action `neuerKommentar` könnte dann wie in Listing 14-33 implementiert werden. 
     894 
     895Listing 14-33 - Implementierung einer Action für eine eigene Interaktion, in `actions/actions.class.php` 
     896 
     897    [php] 
     898    public function executeNeuerKommentar() 
     899    { 
     900      $kommentar = new Kommentar(); 
     901      $kommentar->setArtikelId($this->getRequestParameter('id')); 
     902      $kommentar->save(); 
     903 
     904      $this->redirect('kommentar/edit?id='.$kommentar->getId()); 
     905    } 
     906 
     907Noch ein letztes Wort zu Actions: Wenn Sie sie für eine Kategorie komplett unterdrücken wollen, geben Sie einfach eine leere Liste an, wie in Listing 14-34. 
     908 
     909Listing 14-34 - Alle Actions im `list`-View unterbinden 
     910 
     911        list: 
     912          title:          Liste aller Artikel 
     913          actions:        {} 
    801914}}}