2010-11-03 21 views
1

J'ai déjà défini son option debugging sur true, mais lorsqu'il y a une erreur dans le template smarty (c'est-à-dire qu'il n'y a pas de plugin correspondant pour un smarty_modifier spécifique), rien n'est affiché pour information.Comment faire des informations de débogage de sortie smarty lorsque le modèle ne parvient pas à compiler?

MISE À JOUR

Pour toute personne qui veut avoir un essai, c'est le modèle le plus simple que je peux penser à:

{$var|nosuch_modifier} 

Répondre

1

1- D'abord, vous pouvez vérifier si error_reporting est activée. Cela est généralement fait dans php.ini mais vous pouvez placer ces déclarations sur votre source php.

ini_set('display_errors', 1); 
ini_set('error_reporting', E_ALL); 

et assurez-vous qu'il n'est pas désactivé ailleurs.

2- smarty peut signaler des erreurs en lançant une exception. Vous pouvez définir un gestionnaire d'exception global pour les attraper, voici un exemple;

try { 
    // place your code here 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
+0

Je viens d'essayer, mais il n'y a pas d'exception.J'ai déjà configuré PHP pour sortir des erreurs. – yoyo

0

Mise à jour sur les commentaires:

La seule raison pour laquelle je peux penser est que vous avez défini compile_check false. Dans ce cas, Smarty affichera la dernière source compilée, quoi que vous fassiez dans le fichier .tpl. Alors, avez-vous vérifié et réglé compile_check à vrai?

$tpl->compile_check = true; 

Essayez

ini_set('display_errors', true); 
error_reporting(E_ALL); 

dans le code PHP.

+0

Ah, cette règle de 3 minutes. Même réponse en même temps. –

+0

Cela ne fonctionne pas pour smarty, mec :) – yoyo

+0

Avez-vous essayé [console de débogage] (http://www.smarty.net/manual/en/chapter.debugging.console.php), ['$ error_reporting'] (http://www.smarty.net/manual/en/variable.error.reporting.php) et ['trigger_error()'] (http://www.smarty.net/manual/en/api.trigger. error.php)? –

0

Le rapport d'erreur Smarty peut être défini manuellement.

$smarty->error_reporting = E_ALL^E_NOTICE; 

Quelques commentaires de la mise en sourdine d'erreur Smarty.class.php

est fait parce que certaines personnes mises en œuvre personnalisées error_handlers utilisant http://php.net/set_error_handler et pour une raison quelconque ne comprenaient pas le paragraphe suivant:

Il est important de se rappeler que le gestionnaire d'erreur PHP standard est complètement ignoré pour les types d'erreur spécifiés par error_types sauf si le cal La fonction lback retourne FALSE. Les paramètres error_reporting() n'auront aucun effet et votre gestionnaire d'erreurs sera appelé indépendamment - Cependant, vous pouvez toujours lire la valeur actuelle de error_reporting et agir de manière appropriée. On notera en particulier que cette valeur sera 0 si l'instruction qui a provoqué l'erreur a été ajoutée par l'opérateur @ error-control.

Smarty utilise délibérément @filemtime() sur file_exists() et filemtime() dans certains endroits.Les raisons sont - @filemtime() est presque deux fois plus rapide que l'utilisation de fichier_exists() - entre file_exists() et filemtime() une condition de concurrence est ouverte, ce qui n'existe pas avec l'approche simple @filemtime().