Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | extension_controller [2023.12.12 16:02] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Der Extension Controller ====== | ||
+ | Hier spielt das Leben! Nach dem **M**odel und vor der **V**iew ist der **C**ontroller der zentrale Bestandteil einer Extension (Umsetzung des MVC Modells). Hier laufen die Actions ab, hier wird das Respository abgefragt und hier werden den Templates Daten rübergeschickt. | ||
+ | |||
+ | ===== List Action im Controller ===== | ||
+ | |||
+ | Hier sind einige Beispiele für List Actions im Controller. | ||
+ | \\ In vielen Fällen ist die List Action der Einstieg in eine Ansicht - diese Action wird meist als Standard verwendet, wenn beim Aufruf der Extension keine Action übergeben wurde. | ||
+ | \\ Diese Action dient dazu, Objekte aus dem Datenmodell der Extension aufzulisten. Dies kann einfach durch die Standardfunktion findAll erfolgen. Der Umfang der Funktionen lässt sich beinahe grenzenlos erweitern! | ||
+ | \\ Daher hier ein paar Beispiele für eine ListAction. | ||
+ | ==== List Action mit findAll ==== | ||
+ | |||
+ | |||
+ | **ListAction**: | ||
+ | \\ Diese Funktion bekommt keine Parameter übergeben. | ||
+ | \\ Die Abfrage geschieht über die '' | ||
+ | |||
+ | public function listAction() | ||
+ | { | ||
+ | $blogs = $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | ==== List Action mit Limit und Offset ==== | ||
+ | |||
+ | **listAction**: | ||
+ | \\ Aus den Settings (siehe: TypoScript [[typoscript_constants|Constants]] und [[typoscript_page_setup|Setup]]) werden die Zielseiten für Login und Einbindung des Blog geladen. | ||
+ | \\ Die Parameter für die Paginierung der Seite sind in diesem Fall fest vorgegeben und werden nicht über die Settings geladen. | ||
+ | |||
+ | public function listAction() | ||
+ | { | ||
+ | $pageLoginUID = $this-> | ||
+ | $pageStartUID = $this-> | ||
+ | $limit = 5; | ||
+ | $offset = 0; | ||
+ | $blogs = $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | | ||
+ | | ||
+ | ==== List Action mit diversen Parametern ==== | ||
+ | |||
+ | Jetzt kommt' | ||
+ | \\ Für diese Listenansicht werden nicht nur jeweils 5 Beiträge abgefragt. Für die User Authentifizierung, | ||
+ | \\ Auch zu sehen in dieser Action: Aus der übergebenen URL werden Parameter abgefragt. | ||
+ | | ||
+ | public function listAction() | ||
+ | { | ||
+ | ## Settings auslesen | ||
+ | $pid = $this-> | ||
+ | $pageLoginUID = $this-> | ||
+ | $pageStartUID = $this-> | ||
+ | | ||
+ | ## Alle verfügaren Tags auslesen | ||
+ | $tagShowArray = $this-> | ||
+ | $tagCloudArray = $this-> | ||
+ | | ||
+ | ## Alle verfügaren Kategorien auslesen | ||
+ | $kat = $this-> | ||
+ | $username = $this-> | ||
+ | | ||
+ | ## Standardwerte falls nichts übergeben | ||
+ | $limit = 5; | ||
+ | $offset = 0; | ||
+ | $blogPage = 1; | ||
+ | $controller = ' | ||
+ | | ||
+ | ## Abfrage des Wertes für Offset | ||
+ | $vars = \TYPO3\CMS\Core\Utility\GeneralUtility:: | ||
+ | $offsetLink = $vars[' | ||
+ | | ||
+ | ## Abfrage der Werte für Tags | ||
+ | if ($vars = \TYPO3\CMS\Core\Utility\GeneralUtility:: | ||
+ | $offsetLink = $vars[' | ||
+ | $blogTagLink = $vars[' | ||
+ | $controller = ' | ||
+ | } | ||
+ | | ||
+ | ## Abfrage der Werte für Kategorien | ||
+ | if ($vars = \TYPO3\CMS\Core\Utility\GeneralUtility:: | ||
+ | $offsetLink = $vars[' | ||
+ | $blogKatLink = $vars[' | ||
+ | $controller = ' | ||
+ | } | ||
+ | | ||
+ | ## Wenn keine Werte übergeben: Standards setzen | ||
+ | if ($offsetLink > 0) { | ||
+ | $offset = ($offsetLink - 1) * $limit; | ||
+ | $blogPage = $offsetLink; | ||
+ | } | ||
+ | | ||
+ | ## Blogs abrufen | ||
+ | ## Anzahl der gesamten Blogs abfragen | ||
+ | if ($controller == ' | ||
+ | $blogs = $this-> | ||
+ | $countBlogAll = intval($this-> | ||
+ | } elseif ($controller == ' | ||
+ | $blogs = $this-> | ||
+ | $countBlogAll = intval($this-> | ||
+ | } else { | ||
+ | $blogs = $this-> | ||
+ | $countBlogAll = intval($this-> | ||
+ | } | ||
+ | | ||
+ | ## Daten für Paging | ||
+ | $countBlogPages = 0; | ||
+ | if ($countBlogAll > $limit) { | ||
+ | $countBlogPagesMax = ceil($countBlogAll / $limit); | ||
+ | $p = 0; | ||
+ | while ($p < $countBlogPagesMax) { | ||
+ | $p++; | ||
+ | $countBlogPagesArray[] = $p; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | ## Übergabe aller Parameter an die View | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | | ||
+ | ===== Show Action mit Übergabe eines Objekts ===== | ||
+ | |||
+ | Einfaches Beispiel für die Darstellung eines einzelnen Beitrags in einem Blog. | ||
+ | \\ Die Action bekommt eine Instanz eines Blog Objektes übergeben und reicht diesen weiter an das Template. | ||
+ | | ||
+ | /** | ||
+ | * action show | ||
+ | | ||
+ | * @param \Ibk\Ibkblog\Domain\Model\Blog $blog | ||
+ | * @return void | ||
+ | */ | ||
+ | public function showAction(\Ibk\Ibkblog\Domain\Model\Blog $blog) | ||
+ | { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | ===== Anlage eines neuen Blog Beitrags ===== | ||
+ | |||
+ | |||
+ | /** | ||
+ | * action new | ||
+ | | ||
+ | * @param \Ibk\Ibkblog\Domain\Model\Blog $blog | ||
+ | */ | ||
+ | public function newAction(\Ibk\Ibkblog\Domain\Model\Blog $blog = NULL) | ||
+ | { | ||
+ | $pid = $this-> | ||
+ | $kat = $this-> | ||
+ | $kategorieArray = $this-> | ||
+ | $tag = $this-> | ||
+ | | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | | ||
+ | ===== Prüfen und Speichern eines neuen Beitrags ===== | ||
+ | |||
+ | | ||
+ | /** | ||
+ | * action create | ||
+ | | ||
+ | * @param \Ibk\Ibkblog\Domain\Model\Blog $blog | ||
+ | * @ignorevalidation $blog | ||
+ | */ | ||
+ | public function createAction(\Ibk\Ibkblog\Domain\Model\Blog $blog) | ||
+ | { | ||
+ | ## Required fields überprüfen | ||
+ | $blogError = 0; | ||
+ | if (strlen(trim($blog-> | ||
+ | $blogError++; | ||
+ | } | ||
+ | if (strlen(trim($blog-> | ||
+ | $blogError++; | ||
+ | } | ||
+ | if (strlen(trim($blog-> | ||
+ | $blogError++; | ||
+ | } | ||
+ | | ||
+ | ## Daten zum Speichern bereitstellen | ||
+ | $datetime = date(' | ||
+ | $blogName = $this-> | ||
+ | $blogEmail = $this-> | ||
+ | $blog-> | ||
+ | $blog-> | ||
+ | $blog-> | ||
+ | | ||
+ | ## Wenn alle Felder ausgefüllt sind Speichern | ||
+ | if ($blogError == 0) { | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } else { | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | ===== Zugriff auf ein anderes Repository ===== | ||
+ | |||
+ | Ein anderes Repository per '' | ||
+ | |||
+ | /** | ||
+ | * blogRepository | ||
+ | | ||
+ | * @var \Ibk\Ibkblog\Domain\Repository\BlogRepository | ||
+ | * @inject | ||
+ | */ | ||
+ | protected $blogRepository = NULL; |