Dies ist wahrscheinlich eine wirklich dumme Frage, aber ich kann die Antwort nicht finden und Versuch und Irrtum sind fehlgeschlagen.
Ich entwickle eine Komponente für Joomla 3.x und habe eine Reihe von Klassen, die ich verwenden möchte. Ich versuche die JLoader::registerPrefix()
Methode zu implementieren . Nehmen wir an, ich habe zwei Klassen Helper
und NotHelpful
. Helper
ist eine statische Klasse, gespeichert unter:
JPATH_LIBRARIES. '/foo/bar/Helper.php'
und NotHelpful
ist eine nicht statische Klasse, gespeichert unter:
JPATH_LIBRARIES. '/foo/baz/NotHelpful.php'
Wenn ich diese registrieren möchte, würde ich nach meinem Verständnis anrufen:
JLoader::registerPrefix('Foo', JPATH_LIBRARIES . '/foo');
was ich vom Einstiegspunkt bis zur Anwendung mache.
Dann Anruf Helper
, würde ich nur verwenden , FooBarHelper::method1();
ein neues oder zu instanziiert NotHelpful
wäre$Class = new FooBazNotHelpful();
Was mir unklar ist, ist, wie der tatsächliche Klassenname in Helper.php oder NotHelpful.php lauten sollte. Sollte es sein FooBarHelper
, Helper
, BarHelper
, oder etwas ganz anderes?
Wenn ich versuche anzurufen, FooBarHelper::method1();
erhalte ich den Fehler, egal wie meine Klasse heißt:
Schwerwiegender PHP-Fehler: Klasse 'FooBarHelper' nicht gefunden in
Ich mache eindeutig mindestens eine Sache falsch. Kann mir jemand sagen, was einer oder mehrere von ihnen sind?
quelle
class Helpful { ...
oderclass FooBazNotHelpful { ...
oder etwas anderes?Das gesuchte Schema ist tatsächlich [ComponentName] [Directory] [Name]. Komponenten haben im Allgemeinen mindestens die folgenden Verzeichnisse: Controller, Modell, Ansicht, Helfer. Für eine Komponente namens com_mycomponent mit einer Hilfsdatei, die helper.php lautet, wäre dies MycomponentHelperHelper. Die Camelcase-Formatierung ist besonders wichtig, damit die Klasse richtig erkannt wird.
Sofern Ihre Komponente keine Klassen bereitstellt, die Sie anderen Komponenten zur Verfügung stellen möchten, müssen Sie JLoader :: registerPrefix () nicht verwenden. Sie können stattdessen einfach JLoader :: remove () verwenden und diese Klassen für Ihre Komponente bereitstellen. Für com_mycomponent / helpers würde dies bedeuten
JLoader :: remove ('Helfer', JPATH_COMPONENT. '/ Helfer');
Sie können auch JLoader :: registerNamespace () verwenden, um PHP-Namespaces zu verwenden.
Weitere Informationen zu diesen Methoden finden Sie unter http://docs.joomla.org/Using_own_library_in_your_extensions .
quelle