View previous topic :: View next topic |
Author |
Message |
Dennion Smarty Rookie
Joined: 09 Jan 2017 Posts: 5
|
Posted: Mon Jan 09, 2017 12:56 am Post subject: AutoLoader Fehler |
|
|
Liebe Community,
leider komme ich Aktuell nicht weiter :/ Ich benutze einen Eigenen Autoloader um meine Classen zu Includen. Dieser kommt mit Smarty aber leider garnicht zurecht und ich weiß nichtmehr weiter...
Hier mal der Autoloader
Code: |
define('CLASS_PFAD', 'dcf\lib\\');
function autoload($className){
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName = str_replace("dcf\\", "", $fileName);
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.class.php';
require CLASS_PFAD . $fileName;
}
spl_autoload_register('autoload');
|
Benötigt wird Smarty bei mir in der Template Class:
Code: |
class Template extends Smarty {
|
Und Liegen tut Smarty:
dcf/lib/smarty/Smarty.class.php
und die Template Class
dcf/lib/system/style/Template.class.php
Nun möchte ich aber das Smarty entweder darüber ordentlich Included wird oder der Smarty eigene AutoLoader dort wirkt. Google half mir dort leider ebenfalls nicht weiter
Grüße und schonmal Vielen Dank für die Hilfe,
Dennion |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Mon Jan 09, 2017 6:58 am Post subject: |
|
|
Hey,
was genau ist denn der Fehler? Du verwendest über deiner Klasse aber schon das "use" oder?
Wenn nein, solltest du dann entweder beim erben
Code: | class Template extends \Smarty |
verwenden.
Außerdem wird smarty wahrscheinlich noch gar nicht reingeladen bei dir bzw. deinem Autoloader. Du müsstest Smarty wohl vorher includieren.
Mal abgesehen davon, denke ich, dass es doch einiges im Netz dazu gibt (z. B. Hier).
Ich bin mir auch noch nicht ganz so sicher, warum genau du von smarty erben willst. Meiner Meinung nach ist eine Singleton Smarty Klasse besser, da du dann deine Variablen - die du schon instanziert hast - usw. in jeder Klasse verwenden kannst. Lieber hat dann die Template-Klasse eine Eigenschaft namens "page" oder "smarty" die eben die aktuelle Smarty Instanz darstellt. Aber das musst du natürlich selbst entscheiden |
|
Back to top |
|
Dennion Smarty Rookie
Joined: 09 Jan 2017 Posts: 5
|
Posted: Mon Jan 09, 2017 9:22 am Post subject: |
|
|
Hallo Grizzly,
dein Hinweiß mit dem \ vor Smarty hat mir schon geholfen Hatte es vergessen.
Vielen Dank |
|
Back to top |
|
Dennion Smarty Rookie
Joined: 09 Jan 2017 Posts: 5
|
Posted: Mon Jan 16, 2017 4:31 pm Post subject: |
|
|
Hey,
Aktuell bekomme ich immer den Fehler das er eine Class von Smarty versucht zu Includen die es nicht gibt.
Code: | Smarty_Internal_Compile_Event |
Grüße und Danke für die Hilfe,
Dennion |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Tue Jan 17, 2017 6:44 am Post subject: |
|
|
Hey,
was genau für ein Fehler wird ausgegeben? Also vollständig. Und seit wann bzw. an welches Codestelle?
Mit deiner aktuellen Aussage kann ich dir erstmal leider nicht wirklich behilflich sein. |
|
Back to top |
|
Dennion Smarty Rookie
Joined: 09 Jan 2017 Posts: 5
|
Posted: Tue Jan 17, 2017 10:06 am Post subject: |
|
|
Hey,
obwohl ich Smarty vor meinem Autoloader eingebunden habe mit /Smarty wie du es oben beschrieben hattest. Versucht er über meinen Autoloader die Code: | Smarty_Internal_Compile_Event | Class zu laden die er bei mir natürlich nicht findet.
Grüße,
Dennion |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Tue Jan 17, 2017 10:29 am Post subject: |
|
|
Ich bin mir zwar immer noch nicht ganz sicher ob ich es richtig verstehe, aber vielleicht solltest du in deinem Autoloader folgendes machen
Code: |
$fullClassPath = CLASS_PFAD . $fileName;
if(file_exists($fullClassPath)) {
require_once($fullClassPath);
}
|
der oben aufgeführte Code kommt dann nach der Zeile:
Code: | $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.class.php'; |
und ersetzt dann somit die Zeile:
Code: | require CLASS_PFAD . $fileName; |
|
|
Back to top |
|
Dennion Smarty Rookie
Joined: 09 Jan 2017 Posts: 5
|
Posted: Tue Jan 17, 2017 1:36 pm Post subject: |
|
|
Manschmal ... sind es die einfachen dinge im Leben.
Bislang trat der Fehler nicht erneut auf
Vielen Dank |
|
Back to top |
|
|