global $phpbb_admin_path; anders einbinden.

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.
Benutzeravatar
3Di
Mitglied
Beiträge: 106
Registriert: 12.03.2010 14:33
Wohnort: Milano 🇮🇹 Frankfurt 🇩🇪
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von 3Di »

Nein. Vertrauen Sie mir, nehmen Sie mein Beispiel.
Die Verwendung des "container" auf diese Weise ist in einem "controller" einfach nicht erlaubt (absurd), verwenden Sie die "service", wie sie verwendet werden sollten.
:ugeek: phpBB Studio 🎁 Spende - Ich bin für die Ukraine! 🇺🇦

Private Nachricht nur für bezahlte Arbeiten.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7859
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von Kirk »

@3Di
Ihre zweite Option funktioniert perfekt, vielen Dank.
Ich hab bei meinen Extensionen bisher noch mit contrloller gearbeitet, ist für mich auch Neuland.
Benutzeravatar
3Di
Mitglied
Beiträge: 106
Registriert: 12.03.2010 14:33
Wohnort: Milano 🇮🇹 Frankfurt 🇩🇪
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von 3Di »

Kirk hat geschrieben: 22.01.2022 21:58 @3Di
Ihre zweite Option funktioniert perfekt, vielen Dank.
🔝 👍
:ugeek: phpBB Studio 🎁 Spende - Ich bin für die Ukraine! 🇺🇦

Private Nachricht nur für bezahlte Arbeiten.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von chris1278 »

Ja das Versuch ich ja aber wenn ich das

Code: Alles auswählen

    - '@path_helper'
in die Service.yml meiner extension schreibe und dann

nur das:

Code: Alles auswählen

$this->admin_path = $path_helper->get_phpbb_root_path() . $path_helper->get_adm_relative_path();
in den Contructor des controllers meldet der beim aufruf das hier:

Code: Alles auswählen

[phpBB Debug] PHP Notice: in file [ROOT]/ext/chris1278/cookie/controller/admin_controller.php on line 43: Undefined variable: path_helper

Fatal error: Uncaught Error: Call to a member function get_phpbb_root_path() on null in C:\xampp\73\htdocs\tf1\ext\chris1278\cookie\controller\admin_controller.php:43 Stack trace: #0 C:\xampp\73\htdocs\tf1\cache\production\container_dbdbe80dc7030ae9bd39ee30cca82130.php(1316): chris1278\cookie\controller\admin_controller->__construct(Object(phpbb\config\db), Object(phpbb\language\language), Object(phpbb\log\log), Object(phpbb\request\request), Object(phpbb\template\twig\twig), Object(phpbb\user), Object(phpbb_cache_container), 'php', './../', Object(phpbb\path_helper)) #1 C:\xampp\73\htdocs\tf1\vendor\symfony\dependency-injection\Container.php(306): phpbb_cache_container->getChris1278_Cookie_Admin_ControllerService() #2 C:\xampp\73\htdocs\tf1\ext\chris1278\cookie\acp\main_module.php(22): Symfony\Component\DependencyInjection\Container->get('chris1278.cooki...') #3 C:\xampp\73\htdocs\tf1\includes\functions_module.php(676): chris1278\cookie\acp\main_module->main('\\chris1278\\cook...', 'settings') #4 C:\xampp\73\htdocs\tf1\a in C:\xampp\73\htdocs\tf1\ext\chris1278\cookie\controller\admin_controller.php on line 43
Ich hab das dann so gemacht:

Code: Alles auswählen

public function __construct(
		\phpbb\config\config $config,
		\phpbb\language\language $language,
		\phpbb\log\log $log,
		\phpbb\request\request $request,
		\phpbb\template\template $template,
		\phpbb\user $user,
		$phpbb_container,
		$path_helper,
		$php_ext
	)
	{
		$this->config				= $config;
		$this->language				= $language;
		$this->log					= $log;
		$this->request				= $request;
		$this->template				= $template;
		$this->user					= $user;
		$this->php_ext				= $php_ext;
		$this->md_manager 			= $phpbb_container->get('ext.manager')->create_extension_metadata_manager('chris1278/cookie');
		$this->admin_path 			= $path_helper->get_phpbb_root_path() . $path_helper->get_adm_relative_path();
	}
Dann kommt das mit weiser seite:

Code: Alles auswählen

Fatal error: Uncaught Error: Call to a member function get_phpbb_root_path() on string in C:\xampp\73\htdocs\tf1\ext\chris1278\cookie\controller\admin_controller.php:44 Stack trace: #0 [internal function]: chris1278\cookie\controller\admin_controller->__construct(Object(phpbb\config\db), Object(phpbb\language\language), Object(phpbb\log\log), Object(phpbb\request\request), Object(phpbb\template\twig\twig), Object(phpbb\user), Object(Symfony\Component\DependencyInjection\ContainerBuilder), 'php', './../', Object(phpbb\path_helper)) #1 C:\xampp\73\htdocs\tf1\vendor\symfony\dependency-injection\ContainerBuilder.php(1176): ReflectionClass->newInstanceArgs(Array) #2 C:\xampp\73\htdocs\tf1\vendor\symfony\dependency-injection\ContainerBuilder.php(634): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'chris1278.cooki...') #3 C:\xampp\73\htdocs\tf1\vendor\symfony\dependency-injection\ContainerBuilder.php(588): Symfony\Component\DependencyI in C:\xampp\73\htdocs\tf1\ext\chris1278\cookie\controller\admin_controller.php on line 44
irgendwas fehl noch. ich komm nur nicht drauf was. Tut mir leid wenn ich so dumm frage.

und noch eine Info ja ich bin im Validierungsteam aber nur zum testend er erweiterung. Code testen tu ich so eigentlich nciht weil mir da (leider) noch die Erfahrung fehlt. Daher verstehe ich auch nicht immer direkt alles.
Zuletzt geändert von chris1278 am 22.01.2022 22:10, insgesamt 1-mal geändert.
Benutzeravatar
3Di
Mitglied
Beiträge: 106
Registriert: 12.03.2010 14:33
Wohnort: Milano 🇮🇹 Frankfurt 🇩🇪
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von 3Di »

Ich bin sicher, dass Kirk Ihnen helfen wird, der "constructor" ist falsch. :cookie:

Außerdem halte ich es für besser, den Umgang mit GitHub zu erlernen, der in den Grundzügen wirklich einfach ist, als ein nützliches Werkzeug, um den Code im Falle einer Hilfeleistung überwachen zu können.
:)
:ugeek: phpBB Studio 🎁 Spende - Ich bin für die Ukraine! 🇺🇦

Private Nachricht nur für bezahlte Arbeiten.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von chris1278 »

Ok aber ich versteh nicht was genau da falsch sein soll. Aber mal schauen was Kirk mir da für einen Tip gibt.

@edit
ich denke ich habs hinbekommen.

Also meine Lösung ist jetzt so:

in der Service.yml steht das hier drin:

Code: Alles auswählen

 chris1278.cookie.admin.controller:
        class: chris1278\cookie\controller\admin_controller
        arguments:
            - '@ext.manager' 
            - '@path_helper'
            - '@config'
            - '@language'
            - '@log'
            - '@request'
            - '@template'
            - '@user'
            - '%core.root_path%'
            - '%core.php_ext%'            
Mein constructor sieht jetzt so aus:

Code: Alles auswählen

	protected $extension_manager;
	protected $path_helper;
	protected $config;
	protected $language;
	protected $log;
	protected $request;
	protected $template;
	protected $user;
	protected $root_path;
	protected $php_ext;
	protected $u_action;

	public function __construct(
		\phpbb\extension\manager $ext_manager,
		\phpbb\path_helper $path_helper,
		\phpbb\config\config $config,
		\phpbb\language\language $language,
		\phpbb\log\log $log,
		\phpbb\request\request $request,
		\phpbb\template\template $template,
		\phpbb\user $user,
		$root_path,
		$php_ext
	)
	{
		$this->config				= $config;
		$this->language				= $language;
		$this->log				= $log;
		$this->request				= $request;
		$this->template				= $template;
		$this->user				= $user;
		$this->php_ext				= $php_ext;
		$this->root_path			= $root_path;
		$this->md_manager 			= $ext_manager->create_extension_metadata_manager('chris1278/cookie');
		$this->admin_path 			= $path_helper->get_phpbb_root_path() . $path_helper->get_adm_relative_path();
	}

Ich hab sogar hinbekommen die Ext daten aus dem Extmanager ohne container zu laden.
Zuletzt geändert von chris1278 am 23.01.2022 00:16, insgesamt 1-mal geändert.
Benutzeravatar
3Di
Mitglied
Beiträge: 106
Registriert: 12.03.2010 14:33
Wohnort: Milano 🇮🇹 Frankfurt 🇩🇪
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von 3Di »

Genau das wollte ich, dass Sie durch gezielte Beratung Appetit bekommen. :ugeek:

Das klingt gut, bravo. 👍
:ugeek: phpBB Studio 🎁 Spende - Ich bin für die Ukraine! 🇺🇦

Private Nachricht nur für bezahlte Arbeiten.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von chris1278 »

Also ich hoffe das ist so richtig. aber ich habe immer noch nicht verstanden was bzw. warum der constructor falsch sein sollte. ist den das jetzt wenigstens richtig? zumindest funktioniert das so ohne den container.
Benutzeravatar
3Di
Mitglied
Beiträge: 106
Registriert: 12.03.2010 14:33
Wohnort: Milano 🇮🇹 Frankfurt 🇩🇪
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von 3Di »

3Di hat geschrieben: 23.01.2022 00:16 Genau das wollte ich, dass Sie durch gezielte Beratung Appetit bekommen. :ugeek:

Das klingt gut, bravo. 👍
:ugeek: phpBB Studio 🎁 Spende - Ich bin für die Ukraine! 🇺🇦

Private Nachricht nur für bezahlte Arbeiten.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3526
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: global $phpbb_admin_path; anders einbinden.

Beitrag von chris1278 »

Ich hab mal ne frage ich bin zu testzwecken erstmal auch nur lokal folgendes am ausprobieren. Ich würde mittels ext.php bei einer meiner extensions was in der datenbank ändern. Es geht sich um meine Extension [3.3] Opt-In Cookie Manager by klaro Script

Da ändern sich schon mal die bbcodes. Das ist ja auch kein problem beim update der Extension ist das kein Problem. Nur bei der Deinstallation. Ich habe in der Nächsten Version schon das so eingerichtet das die bbcodes die durch meine Ext erstellt werden auch nach der Deinstallation weiter funktionieren. Dafür musste ich nur die html ersetzung bei der deinstallation ändern in der migration. Das auch net das problem. Manchmal müssen html ersetzungen ja angepasst werden. Das Problem ist da ich die Ext in der Datenbank von com haben sind eigentlich änderungen in migrationsdateien verboten. Klar ich könnte die deinstallationsschritte der migrationsdateien immer anpassen. Aber der weg über die ext.php finde ich da sinnvoller.

Ich habe das Grundprinzip hinbekommen. Hier mal mein Code den ich in der ext.php dafür nutze:

Code: Alles auswählen

public function purge_step($old_state)
	{
		$ext_manager		= $this->container->get('ext.manager');
		$db					= $this->container->get('dbal.conn');
		global $table_prefix;

        if ($ext_manager->is_enabled('chris1278/cookie'))
        {
			$sql_ary = [
				"UPDATE " . $table_prefix . 'bbcodes' . " SET  bbcode_tpl  = 'html-ersetzung' WHERE bbcode_tag ='bbcodename'",
			];

			foreach ($sql_ary as $sql)
			{
				$db->sql_query($sql);
			}
        }

        return parent::purge_step($old_state);
	}
Das problem was ich habe ist das hier:

Code: Alles auswählen

global $table_prefix;
Wie kann ich das $table_prefix nutzen ohne den befehl global zu benutzen. ich würde das gern mittels container lösen in etwa so:

Code: Alles auswählen

$table_prefix = $this->container->get('containername');
Nur hab ich leider den container nicht gefunden welchen ich dafür laden muss.
Antworten

Zurück zu „Extension Bastelstube“