Controller vs. kein Kontroller

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Controller vs. kein Kontroller

Beitrag von chris1278 »

Hallo meine Frage was ist der vor oder nachteil der sich ergibt wenn man Admin Modul als einen Controller macht. Also mache machen das so das die was ich bisher in die admin.php datei geschrieben haben über einen Controller machen. Was genau ist da der unterschied?

Es gibt Extension´s die laden das was min im Adminbereich sieht direkt über eine php Datei im Ordner acp der extension. Andere wiederum laden in eben der Datei einen Controller.

Mich würde nur mal interessieren was bei den beiden Vatrianten die Vor und Nachteile wären.
Verschoben von Support-Forum nach Extension Bastelstube am 19.01.2022 14:10 durch Crizzo

Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1063
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Mike-on-Tour »

Der Hauptunterschied ist, dass man beim Controller mit "service injection" arbeiten kann während die Modul-Skripte mit globalen Variablen arbeiten.
Außerdem benötigt man unabhängig von der Anzahl der ACP-Module nur noch zwei Dateien im Ordner /acp, nämlich eine xyz_info.php, in der alle Module definiert werden und eine xyz_module.php, die den Aufruf des Controllers und dort der jeweils benötigten Funktion übernimmt. Allerdings muss man jetzt zwingend mindestens den Parameter $mode auswerten.

Und soweit ich weiß, wird ab phpBB 4.0.0 das Verwenden von Controllern obligatorisch, weiß jetzt bloß nicht mehr, wo genau ich das gelesen habe.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Kirk »

Hallo
Mike-on-Tour hat geschrieben: 19.01.2022 17:15 Allerdings muss man jetzt zwingend mindestens den Parameter $mode auswerten.
In unserem kleinen Bastel Forum gibt es in dieser Hinsicht auch eine kleine Diskussion. Ich hatte vorher in meinen EXTs $mode nur da eingesetzt wo es mehr als ein Modul gab.
Da ich gerade eine Extension von mir (Sitelogo responsive) einen Update unterziehe und diese auf controller Basis umgestellt habe, stellt mich mit jetzt die Frage ob man in der Datei site_logo_responsive_module.php es so machen sollte.
Hier mit $mode Auswertung: pastebin/?mode=view&s=2
Hier ohne $mode Auswertung: pastebin/?mode=view&s=4
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von chris1278 »

Hi Kirk also dieser Mode ist ja dazu gedacht (vermute ich mal) zu steuern wenn es mehr als einen Moduleintrag gibt.


Wenn man nur ein Modul hat ist das ja recht simpel. bei mehr als einem wird's etwas schwieriger.

Bei meiner Erweiterung Opt-in Cookie Manager habe ich ja zwei Module und das habe ich so gelöst (das wurde auch so auf com in die datenbank genommen):

Einmal die Modul datei:

pastebin/?mode=view&s=5

Dann kannst du ja mal vergleichen.

Übrigens ein verbesserungsvorschlag zu deiner modul datei.
Du brauchst auch das construct nicht in der mnoduldate zu nutzen deine moduldatei wäre so etwas besser:

Code: Alles auswählen

<?php
/**
*
* Sitelogo responsive extension for the phpBB Forum Software package.
* @copyright (c) 2017 - 2022 Kirk https://reyno41.bplaced.net/phpbb
* @license GNU General Public License, version 2 (GPL-2.0-only)
*
*/
 
namespace kirk\slr\acp;
 
class site_logo_responsive_module
{
	public $page_title;
	public $tpl_name;
	public $u_action;

	public function main()
	{
		global $phpbb_container;
		
		$this->tpl_name = 'acp_site_logo_responsive_settings';

		$acp_controller = $phpbb_container->get('kirk.slr.controller.acp');

		$language = $phpbb_container->get('language');

		$this->page_title       = $language->lang('ACP_SITE_LOGO_RESPONSIVE') . ' &hyphen; ' . $language->lang('ACP_SITE_LOGO_RESPONSIVE_RESPONSIVE_SETTINGS');

		$acp_controller->set_page_url($this->u_action);
		
		$acp_controller->slr_settings();
	}
}
Hier geh ich mal davon aus das in deinem Controller dies function hier so benutzt wird:

Code: Alles auswählen

public function slr_settings() 
So würde die moduldatei vollkommen ausreichen. Das construct ist da vollkommen überflüssig da du die variable eh über global lädst.

Das ist aber nur meine meinung dazu.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Kirk »

chris1278 hat geschrieben: 12.05.2022 22:05 dieser Mode ist ja dazu gedacht (vermute ich mal) zu steuern wenn es mehr als einen Moduleintrag gibt.
Das ist mir bewusst Chris, es geht darum weil Mike geschrieben hat das man zwingend mindestens den Parameter $mode auswerten muss.
Das mit dem construct in der Modul Datei ist beabsichtigt.
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1063
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Mike-on-Tour »

Sorry, die Formulierung war etwas irreführend, das bezog sich natürlich auf den Fall mit mehreren Modes.
Wenn es nur einen gibt, kann das natürlich auch einfacher gelöst werden.
Ich mache das aber grundsätzlich über $mode, weil man sich bei Hinzufügen von weiteren Modes einfacher tut.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Kirk »

Danke für die Rückmeldung Mike, dachte das du in den Tiefen von .com darüber neue Erkenntnisse gewonnen hast. Aber schaden tut´s ja auch nicht, vielleicht wird sowas in Zukunft auch zur Richtlinie.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2089
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von LukeWCS »

@Mike

Aktuell auch für mich gerade ein Thema, durch meine Mitarbeit bei ExtOnOff, welches bereits mit ACP Modul auf Controller Basis arbeitet. Da in der aktuellen Doku zu dem Thema ACP Module auf Controller Basis absolut gar nichts zu finden ist, hatte ich nachgehakt. Daher weiss ich nun, das die Kollegen ihr Wissen von der Skeleton Ext haben.

Ich hab mich noch nicht weiter damit beschäftigt und habe es damit auch nicht eilig, weil bis 4.0 noch viel Wasser den Bach runter fliesst. :wink: Aber, soweit ich das beurteilen kann, sind ACP Module auf Controller Basis doch ein winziger Teilbereich von "Controller und Routing", oder sind das zwei völlig verschiedene Bereiche die ausser dem Wort "Controller" nichts miteinander zu tun haben?
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1063
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von Mike-on-Tour »

Der ACP-Controller arbeitet genauso wie der "normale" Controller, der Aufruf erfolgt halt statt über eine in routing.yml definierte Route über das bereits eingebaute ACP-Routing (wenn man es so nennen möchte). Darüber werden dann halt $id (Achtung, trotz des Namens ist das ein String!) und $mode übergeben.
Auch wenn es wohl erst mit phpBB 4 "Pflicht" wird, ist es auch jetzt schon die mMn elegantere Lösung.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2089
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Controller vs. kein Kontroller

Beitrag von LukeWCS »

Moin

Okay Mike, dann ist meine Vermutung ja korrekt gewesen. Mich hatte es einfach nur irritiert, dass man dazu absolut nichts in der Doku finden kann.

Eleganter ja, wenn es mehr als 1 ACP Modul gibt, dann hat das definitiv Vorteile. Bei nur einem ACP Modul sind die Vorteile eher vernachlässigbar. Service Injection per YAML finde ich ohnehin suboptimal, weil ich dann immer, wenn ich einen neuen Dienst bekanntgemacht habe, den Cache löschen muss. Das ist umständlich und aus der Erfahrung mit vielen anderen Sprachen auch ziemlich "exotisch/seltsam", ehrlich gesagt. Damit konnte ich mich bis heute nicht anfreunden bei phpBB. ^^ Beim "klassischen" Modul System von phpBB füge ich einfach den gewünschten Dienst per Container-Funktion hinzu und fertig bin ich damit. Jut, das sind persönliche Argumente.
Möge das Backup mit dir sein. Immer.

Erweiterungen - Infos zur artgerechten Haltung
phpBB Ext Check - Analysesystem für phpBB Erweiterungen (Entwickler Werkzeug)
Antworten

Zurück zu „Extension Bastelstube“