Models und Components dynamisch einbinden.

Hallo,

ersteinmal möchte ich sagen das ich ein absoluter Neuling auf dem Gebiet MVC & PHP Frameworks bin. Langsam fange ich aber an der Framework zu verstehen und das geniale Prinzip hinter diesem (bzw. MVC).

Also, es geht um folgendes. Wenn ich ein Model für ein Formular benötige lege ich dies (wie in der automatisch erstellten webapp) im Ordner "models" ab.

Damit dieses Model dann auch von Yii gefunden wird füge ich der Config über 'import' folgenden Pfad hinzu: 'application.models.*'.

So, und hier möcht ich was ändern. In der Dokumentation habe ich irgentwo ein Kommetar gelesen in dem steht, dass es zum guten Brauch gehört alle Klassen einzufügen und nicht nur eine einzelne.

Aber mal angenommen ich habe ein riesiges Projekt mit 100ten models (Fiktion), die ja dann alle eingebunden werden, dass würde dann ja immens Zeit kosten.

Kann man nicht irgentwie einstellen das die Models in dem Ordner nur bei bedarf geladen werden?

Ich speichere die Models z.B. unter "models/XyzModel.php" und nenne die Klasse "XyzModel", sollte also kein problem sein mittels autoload.


Und noch eine Frage am Rande, beim durcharbeiten von "Working with Forms" in der Doku wird ganz unaufällig folgender Codeschnippsel erläutert:

public function authenticate($attribute,$params)


    {


        if(!$this->hasErrors())  // we only want to authenticate when no input errors


        {


            $identity=new UserIdentity($this->username,$this->password);


            if($identity->authenticate())


            {


                $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days


                Yii::app()->user->login($identity,$duration);


            }


            else


                $this->addError('password','Incorrect password.');


        }


    }

Aber es wird zu keiner Zeit geschrieben wie, und wo die Klasse "UserIdentity" angelgt wird/werden muss?! Irre ich mich da? Hab ich was übersehen?

Hallo,

die Klasse UserIdentity wird automatisch vom Framework um Ordner Components angelegt und eingebunden. Zum einbinden. Alles was im Ordner models/extensions/components/view liegt wird automatisch eingebunden, es ist nicht notwendige ein model manuell einzubinden.

Grüße

Martin

Importieren != Includen.

Alle Ordner, die in der Konfiguration importiert wurden, werden zur Laufzeit zum PHP-Includepfad hinzugefügt. Eingebunden werden die Klassendateien aber nur, wenn sie tatsächlich im Code verwendet werden (lazy loading per autoload). Es ist daher in Ordnung, ganze Verzeichnisse zu importieren.

Oh, danke euch beiden…

Zum testen hatte ich ein echo Statement in ein Model geschrieben welches auf meiner Seite ausgegeben wurde, daher dachte ich die Models werden icudiert. Aber ich habe das Model vermutlich unabsichtlich benutzt.

Nochmal zur UserIdentity, diese Klasse wird bei mir nicht automatisch im ordner components angelegt, zumal meine Applikation ja auch nicht weiß wie die authentifizierung von statten geht (DB, Array oder sonst wie)…

Auch models und components werden bei mir nur eingebunden wenn ich es explizit im configarray mit angebe… (view wird automatisch eingebunden, und beie extensions weiß ich es nicht, soweit bin ich noch nicht)

Die Applikation wurde übrigens nicht mit yiic angelegt.

UserIdentity wird nur in der Demoanwendung mit yiic angelegt. Ansonsten muss man die Klasse selber schreiben. Hast du dir mal das Blog-Tutorial durchgelesen? Da wird schön erklärt, wie das mit der UserIdentity so läuft:

http://www.yiiframew…/prototype.auth

Ajaa… Danke nochmal, hab jetzt mein erstes funktionierends Formular hinbekommen.

Jetzt kommt erstmal Active Record dran.