Seite 2 von 3

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 21:40
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.

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 21:58
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.

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 22:00
von 3Di
Kirk hat geschrieben: 22.01.2022 21:58 @3Di
Ihre zweite Option funktioniert perfekt, vielen Dank.
🔝 👍

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 22:02
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.

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 22:09
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.
:)

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 22.01.2022 22:12
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.

Re: global $phpbb_admin_path; anders einbinden.

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

Das klingt gut, bravo. 👍

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 23.01.2022 00:18
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.

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 23.01.2022 00:20
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. 👍

Re: global $phpbb_admin_path; anders einbinden.

Verfasst: 10.04.2022 14:46
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.