2016-09-28 14 views
0

Ich arbeite an einem Codeigniter-Projekt und habe den Zugriff auf den Controller vom Modell aus gesehen. Ich frage mich, ob $ this-> Controller ist der gleiche oder anders als die Verwendung von $ CI = & get_instance(). Ich nehme an, nein, aber ich bin vertrauter mit dem Standard, der Daten von einer Funktion zurückgibt, als dieser Weg. Ich habe nicht Codeigniter Beispiele tun dies gesehen, so dass ich glaube nicht, das ist eine vorgeschlagene Art und Weise der Steuerung des Zugriffs auf, sondern eher ein Hack:Codeigniter - Zugriffssteuerungsdaten vom Modell

class my_model extends CI_Model 
{ 
    public function __construct() 
    { 
     $this->errors = array(); 
     parent::__construct(); 
     $this->controller = get_instance(); 
    } 

    public function somefunc() 
    { 
     // Accessing controller 
     $this->controller->session->set_userdata('foo', 'bar'); 
     $this->controller->data = "fubar"; 
    } 
} 
+4

Ich denke, das ist Anti-Muster. Der Controller sollte derjenige sein, der die Logik steuert. Sie könnten dies tun, indem Sie die Rückgabe von der Modellfunktion erhalten. – Phiter

+0

Ja einverstanden mit @phiter. Aber immer noch wollen Sie zugreifen dann versuchen Sie $ this-> controller = & get_instance(); Hier finden Sie detaillierte Antwort: http://StackOverflow.com/a/4740548/1578380 – Chintan7027

Antwort

2

Dies ist nicht wirklich CI, das eine Modifikation ist. Möglicherweise wird simple_HMVC verwendet.

Bei normaler CI-Verwendung würde ein Modell Daten zurückgeben.

irgendwo in Ihrer App wird der $ Controller als Controller-Objekt und als Alias ​​im CI-Super-Objekt gesetzt. Auf diese Weise wird ein hierarchischer modularer MVC implementiert, so dass Controller-Methoden innerhalb von Modulen von anderen Modulen aufgerufen werden können.

Es scheint, dass, ob dies gute Praxis ist oder nicht, eine Frage der Debatte ist. Es ist ein bisschen wie ein Hack, aber für simple_hmvc ist es kein schlechter IMHO, aber ich würde das nicht tun. Es scheint mir, dass Sie Situationen schaffen, in denen das Debuggen, Komponententesten oder einfach nur die Klarheit der Verantwortlichkeit stark verwischt wird und später Probleme verursachen wird.

Verwandte Themen