Differences

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

Link to this comparison view

mvc_1 [2017-09-01 14:54]
mvc_1 [2022-07-18 13:20] (current)
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 det 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>