Namespaces und Klassen in Modulen


Topic author
Terpo
Active Member
Active Member
Posts: 2
Joined: 13. January 2014 12:52
phpBB.de User: Terpo

Namespaces und Klassen in Modulen

Post by Terpo » 13. January 2014 13:30

Deine Portal Version: 2.0.1
Typ Deines phpBB Forums: Standard phpBB3
MODs installiert: Nein
Dein Wissensstand: Fortgeschritten
Link zu Deinem Forum: http://ldh.terpo.org

Was hast Du gemacht, bevor das Problem aufgetreten ist?
-

Was hast Du bereits versucht um das Problem zu lösen?
Lösen konnte ich es nicht aber umgehen. Siehe Hauptbeitrag.

Fehlerbeschreibung und Nachricht
Hallo,
um mein Problem zu erklären muss ich wohl erstmal einen kleinen Bogen spannen. Ich versuche ein Welt gegen Welt Modul für GuildWars 2 zu basteln. GW² bietet eine schicke API und Wrapper für PHP gibt es auch. (GW2 Wiki API & genutzter Wrapper für PHP)

Der Wrapper funktioniert einwandfrei und wird folgendermaßen eingebunden (im Normalfall)

Code: Select all

require_once($phpbb_root_path . 'gw2api/Gw2SDK.php');
require_once($phpbb_root_path . 'gw2api/Gw2Exception.php');
use \vesu\SDK\Gw2\Gw2SDK;  //NAMESPACE
use \vesu\SDK\Gw2\TwitchException; //NAMESPACE
Hier der ein wenig zusammengekürzte Modul.php Code:

Code: Select all

 public function get_template_side($module_id)
       {
       global $config, $template, $phpbb_root_path, $phpEx;
	   
	   require_once($phpbb_root_path . 'gw2api/Gw2SDK.php');
	   require_once($phpbb_root_path . 'gw2api/Gw2Exception.php');
	   
	   use \vesu\SDK\Gw2\Gw2SDK;
	   use \vesu\SDK\Gw2\TwitchException;
		
	$gw2_wvw = new Gw2SDK();//$phpbb_root_path .'/cache/gw2_wvw/'    //ZEILE 67
.
. Berechnungen
.
$template->assign_vars(array(
			'PORTAL_GW2_WVW_RED'	=> $gw2_wvw_red,
			'PORTAL_GW2_WVW_BLUE'	=> $gw2_wvw_blue,
			'PORTAL_GW2_WVW_GREEN'	=> $gw2_wvw_green,
		));	
       return 'gw2_wvw.html';
       }
       
Die require Funktion arbeitet soweit einwandfrei, keine Fehlermeldungen. Problematisch wird es bei den Namespaces. Hier mal die Fehlermeldung für mein Modul in nem Testforum:

Code: Select all

Parse error: syntax error, unexpected 'use' (T_USE) in D:\Programme\xampp\htdocs\ldh\portal\modules\portal_gw2_wvw.php on line 64
Sobald ich die use Funktionen oben auskommentiere bekomme ich folgende Fehlermeldung.

Code: Select all

Fatal error: Class 'Gw2SDK' not found in D:\Programme\xampp\htdocs\ldh\portal\modules\portal_gw2_wvw.php on line 67
Aber der Fehler ist mehr oder minder klar weil soweit ich weiß include/require Klassen nicht mit einbinden.

Wenn man den ganzen Spaß direkt in der Portal.php einbindet hat er mit dem use plötzlich kein Problem mehr. Daraus schließe ich das es irgendwas mit dem Modulsystem zu tun haben muss.

Was leider auch nicht funktioniert ist nur die require und use Sachen in die Portal.php zu packen und dann im Modul mit dem Rest weiterzuarbeiten.
Dort kommt dann leider auch diese Meldung:

Code: Select all

Fatal error: Class 'Gw2SDK' not found in D:\Programme\xampp\htdocs\ldh\portal\modules\portal_gw2_wvw.php on line 67
Meine derzeitige, ziemlich russische, Lösung:
Ich hab quasi den kompletten Modulcode direkt in die Portal.php geschrieben und erzeuge mir mit

Code: Select all

$template->assign_vars(array(
			'PORTAL_GW2_WVW'	=> $gw2_wvw_portal_return,
		));

eine Variable.
Dann hab ich quasi ein leeres Modul gebaut welches nur das Template nutzt. Dort wird dann 'PORTAL_GW2_WVW' eingebunden.

Es funktioniert erst einmal soweit, aber die Lösung ist alles andere als zufriedenstellend.[/i]

User avatar

Marc
Dev
Dev
Posts: 2487
Joined: 17. July 2008 21:08
phpBB.de User: marc1706
phpBB.com User: Marc
Location: Clausthal-Zellerfeld / München

Re: Namespaces und Klassen in Modulen

Post by Marc » 14. January 2014 15:05

use kann man meiner Meinung nach nicht in Methoden verwenden, deshalb auch dein Fehler.
Was passiert denn, wenn du das hier verwendest?

Code: Select all

$gw2_wvw = new \vesu\SDK\Gw2\Gw2SDK();
Gegebenenfalls würde ich an deiner Stelle auch mal probieren die use commands einfach direkt im Header der Modul-Datei zu verwenden. Im schlimmsten Falls musst du aber evtl. die require() und use commands in den Header der Modul-Datei packen.


Topic author
Terpo
Active Member
Active Member
Posts: 2
Joined: 13. January 2014 12:52
phpBB.de User: Terpo

Re: Namespaces und Klassen in Modulen

Post by Terpo » 14. January 2014 22:54

Wohoho, den namespace direkt beim Constructor aufzurufen hat wirklich funktioniert. :)

Muss wohl nochmal schauen warum man per use die andere Zeile für die Exceptions einbinden soll / muss, denn bisher hab ich noch nicht sehr viel mitbekommen davon.

Bin jetzt echt happy weil die Portal.php wieder aufgeräumt ist.

Return to “Modification Requests”