Table of Contents

Model-View-Controller

Dags att börja diskutera hur man skulle kunna strukturera ett större projekt.

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…

  1. Hämtar först diverse inställningar, sätter variabler och skapar tex ett databas och session objekt
  2. Kollar över vad som har kommit i $_GET['c'] c=controller och i $_GET['a'] a=action
  3. Läser in rätt controller - en controller sköter logiken, skriver aldrig ut något och kommunicerar med olika modeller
  4. Läser in rätt view, en view är till för att visa sidor - har bara enkel PHP och HTML
<?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');

Detta är min struktur av filer. Det enda som är gjort är en fungerade inloggning därför är katalogerna forum och user tomma

├── 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

Lab - med klasser

Krav

Ni får gärna göra om och bygga ut mina klass exempel.

Ni kan hämta min kod här om ni vill. Skulle det finnas några fel i den får ni fixa det själv :-)

Extrakrav

Min tabell Users

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