2010-11-23 9 views
2

Ich befolgte Schritte in einem Lernprogramm, um zu lernen, wie Code Igniter verwendet wird, um eine PHP/MySQL-Anwendung zu erstellen, und nach Abschluss der Anwendung fehlschlägt, ohne Fehler. Ich verwende TextMate statt einer voll ausgestatteten IDE.Wie debuggen Sie CodeIgniter-Anwendungen?

Wie debuggen die meisten Entwickler, die Code Igniter verwenden, ihre Anwendungen? Gibt es im Framework für Sprudeln Fehler und einen Stack-Trace in die Browser-Sitzung?

Das spezifische Problem, das ich jetzt ansprechen möchte, scheint datenbankbezogen zu sein. Ich konfigurierte meine Datenbank, setup autoload.php und erstellte einen Controller und ein Modell für die Handhabung von Tabellendaten und eine Ansicht für die Präsentation. Aus meiner accounts_model.php:

public function getData() 
{ 
    //Query the data table for every record and row 
    $query = $this->db->get('accounts'); 

    if ($query->num_rows() > 0) 
    { 
     show_error('Database is empty!'); 
    } 
    else 
    { 
     return $query->result(); 
    } 
} 

Wenn ich die Anwendung ausführen, sehe ich „ist ein Fehler aufgetreten \ nDatabase leer ist!“. Da ich weiß, dass die Datenbank nicht leer ist und die Konfiguration korrekt ist, brauche ich etwas aus dem Framework, um mir einen Hinweis zu geben, ob es eine Verbindung zur Datenbank herstellt oder warum die Abfrage leer ist.

Antwort

3

Sie können Xdebug verwenden und es ist eine gute Idee, mit Test Driven Development zu starten, in PHP können Sie PHP Unit dafür verwenden.

+1

Update (2 Jahre später): PHP-Einheit ziemlich gut mit Selen arbeitet http://seleniumhq.org (Funktionsprüfung) –

+0

wie der Link scheint, ist tot: [ http://www.lastcraft.com/first_test_tutorial.php](http://www.lastcraft.com/first_test_tutorial.php) – bg17aw

1

Sie haben if ($query->num_rows() > 0). Dies wird einen Fehler ausgeben, wenn mehr als 0 Zeilen zurückgegeben werden.

+0

Nun, radda radda! Vielen Dank! Ich habe diesen Code aus dem Tutorial kopiert und dieses feine Detail übersehen. Das bringt mich über einen Fehler und in einen anderen. Ich vermute nur, dass die meisten Leute schnell zu einer vollständigen IDE übergehen, die es ermöglicht, Stack-Trace anzuzeigen, Code durchzugehen usw. –

+0

Was ist Ihr nächster Fehler? –

+0

Ich verwende keine IDE, die all diese Dinge erlaubt (na ja, nicht für PHP sowieso). :-P –

3

Wenn Sie nicht bereits die erstaunliche Web-Entwicklungserweiterung für firefox namens Firebug angeschaut haben, sollten Sie es sich ansehen!

Firebug hat eine Erweiterung namens FirePHP, mit der Sie PHP-Anwendungen debuggen können. Jemand hat auch ein Plugin für CodeIgniter namens FireIgnition gemacht.

Damit können Sie Variablen protokollieren usw., damit Sie leichter sehen können, was passiert, wenn Seiten ausgeführt werden.

+0

Danke für die Tipps. –

5

Eine gute Vorgehensweise besteht darin, kritischen Code in try/catch-Blöcke einzuschließen, sodass Sie Ausnahmen verarbeiten können, und dann die Stack-Ablaufverfolgung dieses Fehlers zu protokollieren. In meiner jüngsten Erfahrung habe ich try/catch-Blöcke zusammen mit der Funktion show_error() von CodeIgniter verwendet, um Fehler in meinem Code zu debuggen und abzufangen. Hier ein Beispiel:

public function getData() 
{ 
    //Query the data table for every record and row 
    try{ 
     $query = $this->db->get('accounts'); 

     if ($query->num_rows() > 0) 
     { 
      show_error('Database is empty!'); 
     } 
     else 
     { 
      return $query->result(); 
     } 
    } catch(Exception $e){ 
     log_message('debug',$e->getMessage()); // use codeigniters built in logging library 
     show_error($e->getMessage()); // or echo $e->getMessage() 
     } 
} 

PHP Exception-Klasse bietet verschiedene Methoden zur Fehlersuche. http://www.php.net/manual/en/class.exception.php

1

Ich verwende VS.PHP, ein Add-In zu Visual Studio für meine PHP-Arbeit. Sehr schön. Syntax-Highlighting, Auto-Vervollständigung, Debugging von PHP und JavaScript in derselben Session, das funktioniert.

3

Ich finde dbug sehr hilfreich sein, wenn ich eine Variable, ein Objekt, ein Array werfen müssen, oder Ressource auf dem Bildschirm, um es zu lesen:
example nested arrays with mixed keys

Ein Artikel für sie in CodeIgniter Integration kann here finden .

-1

Nur neugierig

$query->num_rows() > 0 

wenn es Erfolg dann bedeutet es, dass es einige Ergebnisse sind ...

ich so etwas tun wird ...

function get_data() 
    { 


    $results = $this->db->get("tble"); 

    if($results->num_rows()>0) 
    { 

    return $results->result_array(); 

    } 
    else 
    { 
    return array(); 

    } 

} 

und in Controller

if(empty($this->model->get_data())) 
{ 

//do something with data 
} 
else 
{ 

//no data 
}