Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Controller: Modul-Views

Wo ein Framework Controller und Actions hat, hat Exponential Modul-Views – ein View-Skript oder eine Klasse Exponential\Runnable\ModuleView, die die Adressparameter erhält und ein Ergebnis-Array zurückgibt – wie Sie…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/controllers-as-module-views.md

On this page

This page is a translation. Read the English original

Controller: Modul-Views

Diese Seite richtet sich an Entwickler, die Controller schreiben. In Exponential ist die Einheit, die eine Adresse bearbeitet, eine View eines Moduls. Klassische Views sind PHP-Skripte, die der Kernel mit gesetztem $Params und $Module einbindet; seit 6.0.15 schreiben Sie eine View am besten als Klasse, die Exponential\Runnable\ModuleView erweitert, mit einem einzeiligen Skript, das sie aufruft (Befehle, Cronjob-Teile und Modul-Views als Klassen).

Inhalt

  1. Controller und View nebeneinander
  2. Die Skriptform
  3. Die Klassenform
  4. Schlank bleiben
  5. Vor und nach der View
  6. Eine Kernel-View ändern

Controller und View nebeneinander

Framework-ControllerModul-View in Exponential
Eine Klasse mit Action-Methodeneine View pro Adresse; in der Klassenform eine Klasse pro View
Routenparameter als Argumente$Params['ItemID'] (geordnete und ungeordnete Parameter)
Injiziertes Request-ObjekteZHTTPTool::instance() für GET-, POST- und Sitzungsvariablen; Modulaktionen für Schaltflächen
Gibt eine Response zurückgibt ein $Result-Array zurück; der Kernel setzt content in das Pagelayout ein
Autorisierungsattribut oder Middleware'functions' => array( 'read' ) in module.php, geprüft, bevor die View läuft
Helfer zum Rendern von TemplateseZTemplate::factory(), setVariable(), fetch( 'design:...' )

Die Skriptform

<?php
// extension/expdemo/modules/expdemo/item.php
$Module = $Params['Module'];
$item = expDemoItem::fetch( (int)$Params['ItemID'] );
if ( !$item )
    return $Module->handleError( eZError::KERNEL_NOT_FOUND, 'kernel' );

$tpl = eZTemplate::factory();
$tpl->setVariable( 'item', $item );

$Result = array();
$Result['content'] = $tpl->fetch( 'design:expdemo/item.tpl' );
$Result['path'] = array( array( 'text' => 'Items', 'url' => 'expdemo/list' ),
                         array( 'text' => $item->attribute( 'title' ), 'url' => false ) );

expDemoItem::fetch() steht für eine statische Methode Ihrer eigenen Persistent-Object-Klasse (ORM: eZPersistentObject). Die Schlüssel des Ergebnisses werden unter Responses, Weiterleitungen, Fehler und JSON erklärt.

Die Klassenform

Aus Eine Modul-View:

<?php
// extension/myext/classes/runnable/views/report/show.php
namespace Exponential\View\Extension\Myext\Report;

class Show extends \Exponential\Runnable\ModuleView
{
    public function run( array $scope )
    {
        $Module = $scope['Params']['Module'];
        $tpl = \eZTemplate::factory();
        $tpl->setVariable( 'report', \myReportService::build( $scope['Params']['Month'] ) );
        return array( 'content' => $tpl->fetch( 'design:report/show.tpl' ),
                      'path' => array( array( 'text' => 'Report', 'url' => false ) ) );
    }
}
<?php
// extension/myext/modules/report/show.php (named in module.php ViewList as before)
return \Exponential\View\Extension\Myext\Report\Show::main( __FILE__, get_defined_vars() );

Die Klasse lässt sich mit Unit-Tests prüfen, durch Ereignisse umschließen und über Einstellungen neu implementieren. Denken Sie daran, nach dem Hinzufügen der Klasse die Autoloads der Erweiterungen neu zu erzeugen (php bin/php/ezpgenerateautoloads.php -e).

Schlank bleiben

Der Kernel selbst legt Arbeit, die sich eine View, ein Befehl und ein Cronjob-Teil teilen, in Dienstklassen ab, zum Beispiel Exponential\Service\Trash für die Papierkorb-View, bin/php/trashpurge.php und den Cronjob-Teil trashpurge (Dienste). Machen Sie es genauso: Eingaben in der View einlesen und prüfen, für die eigentliche Arbeit eine einfache Klasse aufrufen, das Ergebnis rendern. Diese einfache Klasse testen Sie ohne Datenbank (Testen).

Vor und nach der View

Jede klassenbasierte View läuft zwischen zwei Ereignissen: runnable/view/before (Benachrichtigung) und runnable/view/after (ein Filter, der das Ergebnis erhält und zurückgeben muss). Registrieren Sie Listener in site.ini [RunnableSettings] Listeners[]. Das kommt Interceptors auf Controller-Ebene wie dem HandlerInterceptor von Spring oder einem Symfony-Listener für kernel.controller am nächsten (Ereignisse und Listener).

Eine Kernel-View ändern

BedarfMechanismus
Das Verhalten einer Kernel-View ändernsite.ini [RunnableSettings] Implementation[<view class>]=<your subclass>; die Unterklasse muss die Klasse erweitern, die sie ersetzt
Die Views oder Templates eines ganzen Kernel-Moduls ersetzenein Modul-Override durch eine Erweiterung (Modul-Override durch Erweiterungen)
Nur das Markup ändernein Template-Override, ganz ohne PHP (Template-Auflösung)
# settings/override/site.ini.append.php, or an extension's settings/site.ini.append.php
[RunnableSettings]
Implementation[Exponential\View\Kernel\Content\History]=myHistoryView

Keine Kernel-Datei wird kopiert, sodass das nächste Release das Original unter Ihrer Unterklasse aktualisiert.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x