Avatar billede Slettet bruger
27. august 2009 - 22:57 Der er 14 kommentarer og
1 løsning

Models i MVC

Hey alle,

Som sagt har jeg smidt et indlæg om MVC i PHP for 20 dage siden - og jeg synes jeg er kommet længere. Jeg har kodet et lille MVC framework udfra denne her guide: http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/

Her har jeg så brugt metoden i url: /controller/action/query/string/her, som fungerer fint og godt. Har også downloadet ZendFramework, og lavet en lille test med det, hvor jeg har 3 sider: en forside, om mig side og kontakt side.

Men nu kommer mine spørgsmål til hvad Model er i MVC? Har hørt om "Skinny controllers, fat models", og det lyder fornuftigt - bare ærgeligt jeg ikke helt ved hvad Model i MVC er. Det lyder jo meget voldsomt, når Model jo er en vigtig del af MVC. Min teori om Model blev ødelagt, da jeg søgte videre på nettet om det. Jeg troede, som der også står i den tutorial jeg har linket det, at model var en forbindelse mellem databasen og applicationen. Så Model var data'en, som man trækker om fra en database. Men jeg har læst, det også kan være XML, andet data, og noget logik.

Hmm hmm tænker jeg så, og snakker så med en af mine venner om det. Han siger også, at i f.eks. sådan et her eksempel, skal teksten kodes ind i Model:

class Default_IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        if($_POST["name"] == "Alexander") $hi = "hej guttermand";
        else $hi = "hej fremmede";
       
        $this->view->hiText = $hi;
    }
}

Lige en test med ZendFrameworket. Men der siger han man ikke skal hardcode det tekst ind i controlleren, men man skal f.eks. sige: $hi = $model["guttermand"] (bare eks.). Så tænker jeg bare: er model så ALT slags data? Hvordan vil I f.eks. mit lille eksempel ovenover? Har forstået hvad view er, og controlleren - men er ærlig talt usikker på Model. Burde jeg lave en model til den controller, der så hedder "Default_Model_Index", og så lave et par variabler 'public $guttermand = "Hej guttermand", $fremmede = "Hej fremmede";' ?

Kort opsummering: hvad er Model i PHP? Det ville være fint hvis I kunne illustrere nogen små koder evt.

Men håber I har lyst til at svare mig - den forvirrede dreng.

Hav en fortsat hyggelig dag.
Avatar billede arne_v Ekspert
27. august 2009 - 23:11 #1
Modellen indeholder alt det (eller er ihvertfald et interface til alt det) som du laver din applikation for.

Formaalet med din app er ikke at outputte HTML (V) eller at processe bruger input (C). Formaalet med din app er at "goere" noget - og det er representeret ved M.

Det kan vaere at gemme i og hente nogle data fra en database, gemme og hente nogle data i nogle XML filer, sende en email, styre noget hardware, kalde en backend via web service, kommunikere med en backend via message queues o.s.v..

Det kan vaere alt muligt. Men har det til faelles at det er det som er aarsag til at du skriver din web app.
Avatar billede Slettet bruger
27. august 2009 - 23:19 #2
Cool arne_v, tak for det hurtige svar. :)

Så ja en mail() vil lande i sin Model f.eks.? Så man har f.eks. en "Model_Mail" til at sende mails med? Så man kan bruge den i sine forskellige controllers?

....
$mail = new Model_Mail();
$mail->to("mail@her.dk");
$mail->message("Hej med dig");
$mail->send();
....

Kan det være et eksempel? Er absolut kørt helt død i Models, så du er velkommen til at "grine" af mig, hvis det ser helt dumt ud det jeg laver lige pt. - hehe ;)

Men igen - her får man mikset sin email adresse ind i controlleren igen i mit eksempel. Skal man så også have sådanne informationer stående i en anden model?

.... controller index action
$mail = new Model_Mail();
$info = new Model_Info();

$mail->to($info->mail);
$mail->message($_POST["msg"]);
$mail->send();
....

Tak for dit svar.
Avatar billede arne_v Ekspert
28. august 2009 - 17:25 #3
Om du skal have en info eller ej må afhænge lidt af om det er noget der giver mening eller ej.

Det kan jeg ikke se udfra dit eksempel.
Avatar billede Slettet bruger
29. august 2009 - 19:58 #4
Men jeg bør aldrig "hardcode" den e-mail ind i controlleren, vel?
Avatar billede arne_v Ekspert
31. august 2009 - 14:48 #5
Hvis du mener mail adressen, saa var det nok bedst at have den i en konfigurations fil.
Avatar billede Slettet bruger
03. september 2009 - 23:12 #6
Okay super. :) Smid lige et svar, tak. Og tak for hjælpen!
Avatar billede Slettet bruger
03. september 2009 - 23:14 #7
Hovsa - har jo ikke angivet point. Hvordan gør vi så du kan få lidt points alligevel?
Avatar billede arne_v Ekspert
03. september 2009 - 23:16 #8
jeg skal smide et svar
Avatar billede Slettet bruger
03. september 2009 - 23:18 #9
Kunne ikke give dig nogen points. :(
Avatar billede arne_v Ekspert
03. september 2009 - 23:21 #10
Paa en eller anden maade var point antal sat til 0.
Avatar billede arne_v Ekspert
03. september 2009 - 23:22 #11
altsaa for spoergsmaalet
Avatar billede Slettet bruger
03. september 2009 - 23:28 #12
Ja ved det. Hmm. Kan man sende points?
Avatar billede arne_v Ekspert
04. september 2009 - 00:29 #13
http://www.eksperten.dk/faq#faq-5-3

er tidligere anvendt i ligneden tilfaelde.
Avatar billede arne_v Ekspert
04. september 2009 - 00:29 #14
... lignende ...
Avatar billede Slettet bruger
05. september 2009 - 00:38 #15
Hej igen, glemte lige at give dig linket til det nye post. http://www.eksperten.dk/spm/885581
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB