Differences

This shows you the differences between two versions of the page.

Link to this comparison view

mvc_1 [2010-12-10 11:05]
Joakim Forsgren
mvc_1 [2017-09-01 14:54]
Line 1: Line 1:
-====== Model-View-Controller ====== 
-{{:350px-modelviewcontrollerdiagram2.svg.png?320|}} {{:mvc.png?320|}} 
- 
-Dags att börja diskutera hur man skulle kunna strukturera ett större projekt. 
-  * [[http://en.wikipedia.org/wiki/Model–View–Controller|MVC wikipedia (en)]] 
-  * [[http://sv.wikipedia.org/wiki/Model-View-Controller|MVC wikipedia (sv)]] 
- 
-==== Ett enkelt ex ==== 
-Här kommer ett enkelt ex på hur man skulle kunna jobba med MVC. Vi kommer att utvidga detta framöver\\ 
-Controllers och Models är i princip fria från HTML, i views har man endast enkel PHP och HTML 
- 
-index.php - Denna fil har som enda uppgift att alltid läsa in rätt filer... 
- 
-  - Hämtar först diverse inställningar, sätter variabler och skapar tex ett databas och session objekt 
-  - Kollar över vad som har kommit i $_GET['c'] c=controller och i $_GET['a'] a=action 
-  - Läser in rätt controller - en controller sköter logiken, skriver aldrig ut något och kommunicerar med olika modeller 
-  - Läser in rätt view, en view är till för att visa sidor - har bara enkel PHP och HTML 
-  
-<code php> 
-<?php 
-define('PATH','../'); // Sökvägen till själva applikationen 
-// alla inställnignar och några funktioner 
-include(PATH.'include/setup.php'); 
- 
-// Säkrar upp vad som kommer i $_GET['c'] c=controller och i $_GET['a'] a=action, kommer inget blir det index 
-(isset($_GET['c'])?str_replace('.','',$_GET['c']):$_GET['c'] = 'index'); 
-(isset($_GET['a'])?str_replace('.','',$_GET['a']):$_GET['a'] = 'index'); 
- 
-// läser in rätt controller 
-$controller = PATH . 'controllers/' . $_GET['c'] . 'Controller.php'; 
-if (file_exists($controller)) { 
- include($controller); 
-} else { 
- $session->AddError('No controller named:' . $_GET['c'] . 'Controller'); 
-} 
- 
-// visar HTML med rätt view 
-include(PATH.'views/head.php'); 
-$session->PrintInfo();; // skriver ut fel och annan info 
-$view = PATH . 'views/' . $_GET['c'] . '/' . $_GET['a'] . '.php'; 
-if (file_exists($view)) { 
- include($view); 
-} else { 
- $session->AddError('No view in ' . $_GET['c']. ' named:' . $_GET['a']); 
- $session->PrintInfo();; // Man vill ju se detta fel också... 
-} 
-include(PATH.'views/foot.php'); 
-</code> 
- 
-Detta är min struktur av filer. Det enda som är gjort är en fungerade inloggning därför är katalogerna forum och user tomma 
-<code> 
-├── classes 
-│   ├── model 
-│   │   └── user.php 
-│   └── service 
-│       ├── db.php 
-│       └── session.php 
-├── controllers 
-│   ├── indexController.php 
-│   └── loginController.php 
-├── htdocs 
-│   ├── images 
-│   ├── index.php 
-│   └── style.css 
-├── include 
-│   └── setup.php 
-└── views 
-    ├── foot.php 
-    ├── forum 
-    ├── head.php 
-    ├── index 
-    │   └── index.php 
-    ├── login 
-    │   ├── login.php 
-    │   ├── logout.php 
-    │   ├── register.php 
-    │   ├── sendpassword.php 
-    │   └── setpassword.php 
-    └── user 
-</code> 
- 
-====== Lab - med klasser ====== 
-==== Krav ==== 
- 
-  * Ni skall göra ett forum med hjälp av klasser som uppfyller alla krav i lab 5, ni skall utgå ifrån min kod och lägga till det som saknas. 
-  * Ni skall använda er av klasserna service_db, model_user och service_session 
-  * Ni skall jobba med controller, model och views enligt den metod jag har visat er och som finns i min exempel kod nedan. 
-  * Ni skall göra minst en controller (forumController) 
-  * Ni skall göra minst en model (model_forum) som bör använda sig av någon av mina klasser.\\ Lämpliga metoder skulle kunna vara:\\ addThread, getThreads, addItem, getItems changeItem, deleteItem mm. 
-  * Ni ska göra ett antal views 
- 
-Ni får gärna göra om och bygga ut mina klass exempel. 
- 
-Ni kan hämta min {{:mvc.zip|kod}} här om ni vill. Skulle det finnas några fel i den får ni fixa själv :-) 
- 
-==== Extrakrav ==== 
-  * När man har loggat in skall man kunna ändra sina egna uppgifter och kunna ladda upp en profilbild som skall synas på lämpliga ställen i forumet. (userController + övrigt som man behöver göra) 
-  * Man skall kunna se lite mer information om en användare, när den gick med, hur många och vilka trådar den har skapat, hur många inlägg den har skrivit mm. 
- 
-Min tabell Users 
-<code> 
-CREATE TABLE IF NOT EXISTS `lab5_Users` ( 
-  `UserID` int(11) NOT NULL AUTO_INCREMENT, 
-  `FirstName` varchar(50) NOT NULL DEFAULT '', 
-  `LastName` varchar(50) NOT NULL DEFAULT '', 
-  `EMail` varchar(50) NOT NULL DEFAULT '', 
-  `Password` varchar(50) NOT NULL DEFAULT '', 
-  `Deleted` tinyint(1) NOT NULL DEFAULT '0', 
-  `Admin` tinyint(1) NOT NULL DEFAULT '0', 
-  PRIMARY KEY (`UserID`), 
-  UNIQUE KEY `EMail` (`EMail`) 
-) ENGINE=MyISAM 
-</code>