2012-04-14 11 views
3

Ich habe Probleme mit dem Testen von Model in CakePHP 2.0 und es scheint, dass das Problem auf dem Konstruktor des Modells liegt.Wie man den Konstruktor des Modells in CakePHP korrekt überschreibt

public function __construct(){ 
    parent::__construct(); 
    $this->_pagi_cuantos = 2; 
} 

Auch wenn ich all seinen Inhalt löschen, ich immer noch Probleme haben, versuchen, den Test auszuführen.

Mark Geschichte hat mir gesagt:

, wenn Sie ein Konstruktor stellen Sie sicher, haben Sie zum Konstruktor überschreiben richtig. Andernfalls können Fehler wie diese auftreten.

Was mache ich falsch?

+0

Was passiert? Sie müssen uns etwas mehr geben, um weiterzumachen, wenn Sie Hilfe brauchen ... – Joep

+0

Nun, was passiert, sollte irrelevant sein. Aber wenn du es wissen willst: Das testCase wählt die Datenbank nicht gut aus. Es funktioniert mit dem Standard, wenn es mit dem Test funktionieren soll. (BTW, ich habe den Beitrag aktualisiert) – Alvaro

+0

Dieses Problem ist für alle Versionen von CakePHP aktuell. Ich habe das gleiche in 1.3 –

Antwort

18

, warum Sie nicht schauen in den Kern-Code seine Open-Source schließlich: https://github.com/cakephp/cakephp/blob/2.1/lib/Cake/Model/Model.php#L653

so für alle Modelle:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
} 
+0

Vielen Dank !! Es hat gut funktioniert. – Alvaro

+0

Dies wird auch in der CakePHP 2.0-API-Dokumentation für [Overriding Model's __construct method] (https://api.cakephp.org/2.0/class-AppModel.html#___construct) erwähnt. – icc97

6

Anstatt den Konstruktor überschreiben, wie etwa mit before() für Controller oder die Vorher-Methoden für das Modell wie beforeFind(), beforeValidate(), etc.

1

Eine Möglichkeit, die ich gefunden habe, ist etwas zu tun:

function __construct() { 
    call_user_func_array(array('parent', '__construct'), func_get_args()); 
} 

Damit können Sie sich keine Sorgen darüber machen, was der Elternteil erhält. Obwohl dieser Code ziemlich scheußlich ist.