web-dev-qa-db-fra.com

Débogage dans CodeIgniter (et MVC)

Souvent, je ressens le besoin de vider une variable à des fins de débogage. Dans CodeIgniter, j'ai du mal à le faire car je ne peux pas simplement "faire écho" une variable sans la passer d'abord à la vue, ce qui, à mon avis, est pénible. J'ai lu la documentation officielle, bien que j'aie trouvé une bonne solution avec la fonction log_message mais je ne peux pas la faire fonctionner, même si j'ai réussi à rendre le dossier "logs" accessible en écriture et à changer le "seuil" comme conseillé. Aucune suggestion?

https://www.codeigniter.com/user_guide/general/errors.html

16
Thibaut Delarbre

Ce n'est pas une bonne pratique, mais vous pouvez sortir n'importe quoi vers le navigateur à tout moment de l'exécution (à partir des classes de base, des bibliothèques, des modèles et des contrôleurs) en utilisant simplement print_r() au point où vous voulez sortir les informations.

Bien sûr, cela ne s'affichera parfois pas car il peut y avoir des redirections/routes/etc qui amènent l'utilisateur à l'étape suivante de l'exécution du contrôleur, mais si vous souhaitez supprimer cela (encore une fois, à des fins de débogage uniquement), vous pouvez utiliser:

print_r($string_or_variable_to_debug);
die();

La commande die() arrêtera toute exécution et ne vous laissera que les informations que vous souhaitez afficher.

L'utilisation de log_message() est une meilleure pratique, mais il est difficile de comprendre pourquoi vous n'y réussissez pas si vous dites que vous avez suivi les étapes suivantes:

  1. Assurez-vous que votre dossier de journaux est accessible en écriture
  2. Réglez $config['log_threshold'] Sur 2, 3 ou 4
  3. Utilisé la fonction comme ceci: log_message('debug','Message you want to log');

Si vous souhaitez utiliser print_r() pour formater correctement un tableau ou un objet dans le message de journal, vous devrez définir le deuxième paramètre de print_r() sur TRUE, comme ceci :

log_message('debug',print_r($array_or_object,TRUE));
25
Jordan Harper

Vous devez définir votre $ config ['log_threshold'] dans le fichier config.php car par défaut c'est 0 (pas de journaux)

  • 0 = désactive la journalisation, la journalisation des erreurs est désactivée
  • 1 = Messages d'erreur (y compris PHP)
  • 2 = Messages de débogage
  • 3 = Messages d'information
  • 4 = Tous les messages
15
SubRed

Je pense que la réponse que vous recherchez est: Codeigniter - Developer's Debug Helper

Vous pouvez ajouter ce fichier à application/helper dossier. Puis chargement automatique vayes_helper dans application/config/autoload.php pour une utilisation générique. Il vous suffit alors d'écrire:

vdebug($variable); // In Controllers, Models, Libraries, Helpers
<?=vdebug($variable)?> // In View files
8
YahyaE
log_message('debug',print_r($array_or_object_you_want_to_print,TRUE));

Cela imprimera bien votre tableau dans le journal. Voici l'exemple de sortie:

[1] => Array
    (
        [uid] => 10049082
        [phone_id] => 2
        [friend_status] => 0
        [friend_event_hide_status] => 
    )

[2] => Array
    (
        [uid] => 10042768
        [phone_id] => 4
        [friend_status] => 3
    )

[3] => Array
    (
        [uid] => 10078255
        [phone_id] => 6
        [friend_status] => 2
    )

[4] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => Rajesh 
    )

[5] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => ritesh kumar
    )

[6] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => Le
    )
2
Ritesh Kumar