Portal > Foren > PHP > PHP-Programmierung > trigger_error bei Smarty
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 23.10.2007, 11:27 Nach oben    #1
...möp...
 
Benutzerbild von Creativ
 
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 79
Standard trigger_error bei Smarty

Hi,
Ich bin gerade dabei die trigger_error Funktion von Smarty soweit umzubauen, dass wenn ein Fehler kommt, auch gleich noch ein Eintrag in die Datenbank gemacht wird.

Der Eintrag soll mit meiner Error-Klasse gemacht werden. Habe also erstmal am Anfang von Smarty eine Variable deklariert:
PHP-Code:
var $errorClass
Danach habe ich dann im Konstruktor eine Instanz von meiner Klasse übergeben. Hier mal der neue Konstruktor:
PHP-Code:
function Smarty(Singleton &$singleton)
    {
      
$this->errorClass $singleton->getInstance('error');
      
print_r($this->errorClass);    
      
$this->assign('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME']
                    : @
$GLOBALS['HTTP_SERVER_VARS']['SCRIPT_NAME']);
    } 
(Die Klasse singleton enthält alle meine Klassen)

Da gibt das print_r() auch das richtige ergebnis aus. Also da ist es noch ein Objekt der Error-Klasse.

Dann habe ich noch die funktion trigger_error bissschen bearbeitet:
PHP-Code:
function trigger_error($error_msg$error_type E_USER_WARNING)
    {
        
// Save Error
        
$this->errorClass->insertError("Template","Template error: ","Template");
        
        
trigger_error("Smarty error: $error_msg"$error_type);  
    } 
Aber da enthält $this->errorClass auf einmal den Default-Wert, also als ob der Konstruktor ignoriert wird, und ich erhalte dadurch eine Fehlermeldung das die Funktion insertError bei $this->errorClass nicht vorhanden ist.

Habt ihr eine Idee woran das liegen könnte?
Creativ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2007, 12:17 Nach oben    #2
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
Standard

nur mal so, warum veränderst du die Basisklasse von Smarty ? du kannst doch einfach mittels einem eigenen Errorhandler eventuelle Fehler abfangen ? Ist denke ich der komfortablere Weg, weil du ihn für jede Komponente die du nutzt nicht anpassen musst, sondern einfach läuft.

Desweiteren wozu ÜBERGIBST du einen Singleton ? der sollte doch überall erreichbar sein:

$error = Singleton::getInstance('error');


mach mal an var_dump(debug_backtrace()); in der Funktion, darüber kannst du eventuell sehen wie die trigger_error-methode von smarty aufgerufen wurde, nicht dass sie irgendwo mittels Smarty::trigger_error() aufgerufen wird, weil dann wird ja eben kein konstruktor aufgerufen.



mfg
robo47
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2007, 13:27 Nach oben    #3
...möp...
 
Benutzerbild von Creativ
 
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 79
Standard

Hi,
habe jetzt gerade nochmal kurz die Singleton Klasse umgebaut.
Danke für den Hinweise

Hm...naja ich muss die Basis-Klasse benutzen, da das irgendwie ein kleiner "Bug" von Smarty ist. Es wird zwar in der Smarty.class.php immer die gleiche Methode, also trigger_error aufgerufen und die könnte man ja auch in einer eigenen Klasse ersetzen.
Aber in der Smarty_Compiler.class.php wird weiterhin die trigger_error() von der Basisklasse benutzt und nicht von der eigenen. Man müsste also die Klasse an vielen Stellen umschreiben. Da änder ich doch lieber nur die Funktion trigger_error in der Basisklasse

Die trigger_error wird auch immer richtig aufgerufen, also es wird auch davor immer der Kontruktor aufgerufen.
Habe es jetzt aber bisschen anders gelöst:
PHP-Code:
 function trigger_error($error_msg$error_type E_USER_WARNING)
    {   
        
$errorClass Singleton::getInstance('error');
        
$errorClass->insertError("Template-Error","Template error: ".addslashes($error_msg),"Template");   
        
trigger_error("Smarty error: $error_msg"$error_type);  
    } 
Damit funktioniert es jetzt einwandfrei

Dennis
Creativ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2007, 13:40 Nach oben    #4
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
Standard

nutzt du php5 ? dann erstellt doch einfach eine Klasse die von smarty erbt ? damit musst du beim Einsatz einer neuen Version nichts verändern, ich würde das grob so machen:

PHP-Code:
require_once('/path/to/smarty.class.php');
class 
mySmarty extens Smarty
{
    public 
__construct()
{
// da Smarty ne php-Klasse ist, ist der Konstruktor nicht __construct();
parent::Smarty();
// hier dein weiterer Code
}
 public function 
trigger_error($error_msg$error_type E_USER_WARNING)
    {   
        
$errorClass Singleton::getInstance('error');
        
$errorClass->insertError("Template-Error","Template error: ".addslashes($error_msg),"Template");   
        
parent::trigger_error("Smarty error: $error_msg"$error_type);  
    } 


so kannst du deine Erweiterungen machen und jederzeit ohne Probleme auf eine neue Version von Smarty wechseln.
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2007, 14:56 Nach oben    #5
...möp...
 
Benutzerbild von Creativ
 
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 79
Standard

Genau das meine ich ja
Das funktioniert nicht, da Smarty noch eine 2. Klasse Smarty_compiler hat und die greift auf das trigger_error von der Klasse Smarty zurück.
Wenn ich also eine Klasse mache die von Smarty erbt und dort eine neue trigger_error Funktion einbaue, wird diese von Smarty_compiler ignoriert, da sie die Funktion aus der Klasse Smarty aufruft.

Ich hoffe das ist verständlich was ich meine
Creativ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.10.2007, 15:05 Nach oben    #6
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
Standard

hmm, das ist doof, dachte grad darüber lässt sich was machen:
(in der Smarty-Basisklasse)
PHP-Code:
    /**
     * The file that contains the compiler class. This can a full
     * pathname, or relative to the php_include path.
     *
     * @var string
     */
    
public $compiler_file        =    'Smarty_Compiler.class.php';

    
/**
     * The class used for compiling templates.
     *
     * @var string
     */
    
public $compiler_class        =   'Smarty_Compiler'

aber dann müsste man die neue Klasse von der compiler-Klasse wieder erben lassen, sollte aber funktionieren, sich quasi ne eigene compiler-klasse zu basteln die eigentlich von der anderen Smarty-Compiler-Klasse UND mySmarty erbt und damit wäre ja trigger_error wieder durch die mySmarty-Variante überschrieben.

mfg
robo47
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrsprachigkeit mit Smarty Eyüp PEAR, PECL und Frameworks 7 08.06.2007 15:40
Smarty und number_format() Berti PEAR, PECL und Frameworks 12 23.02.2007 04:39
Verständnissfrage zu Smarty la-finest PEAR, PECL und Frameworks 7 26.09.2006 19:25
Navigation auf Smarty umstellen?! napsio PEAR, PECL und Frameworks 4 25.01.2006 19:22
PEAR Alternative zu Smarty ex³ PEAR, PECL und Frameworks 5 08.11.2005 21:19


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45