Kan iemand een voorbeeldje geven van een simpel begin met MVC?
Ik heb al vele tutorials bekeken, maar kom er niet helemaal uit hoe te beginnen.
Ik wil een nieuwssysteem maken.


<?php
// newsitem.controller.php
class NewsitemController
{
  private $_model;

  public function __construct($model)
  {
    $this->_model = $model;
  }

  public function create($id)
  {
    $this->_model->create($id);
  }

  public functin getAll()
  {
    $this->_model->getAll();
  }
}

// newsitem.model.php
class NewsitemModel
{
  private $_database;

  public function __construct($database)
  {
    $this->_database = $database;
  }

  public function create($data)
  {
    
  }

  public function getAll()
  {
    // hier komt de database actie..
  }
}

// index.php
$model = new NewsitemModel($database);

$controller = new NewsitemController($model);
$controller->create($_GET["id"]);
?>

// newsitem.html
<h1><?php echo $title; ?></h1>
<p><?php echo $message; ?></p>
Dat was mij wel duidelijk haha :)
Kun je eens een voorbeeldje geven van hoe zo'n Router eruit komt te zien?
Dus stel mijn URL is /nieuws/dit-is-een-nieuwsitem.

Hoe weet de Router dan welke URL bij welke Controller hoort? En welke action er vervolgens moet worden aangeroepen?
In dit geval zou dat de NewsitemController zijn met de action getByTitle($title).
Dat "weet" de router ook helemaal niet: je geeft in de configuratie van de front controller zelf aan (a) wat geldige routes zijn voor je applicatie en (b) welke controllers daarbij horen.

Voor /nieuws/dit-is-een-nieuwsitem van je nieuwssysteem is dan bijvoorbeeld /nieuws/{slug} een geldige route. In de stijl van Symfony zou je dat zo configureren:


<?php
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

$collection = new RouteCollection();
$collection->add(
    'news_show',
    new Route(
        '/nieuws/{slug}',
        array('_controller' => 'AcmeNewsBundle:News:show')
    )
);
return $collection;
?>
Aah oke! Ik begin het een beetje te begrijpen.
Ik zal hier later op terug komen.

Dan een volgende vraag..
Ik heb nu nieuws, maar ik wil ook gewoon algemene content pagina's kunnen aanmaken.
Stel mijn URL is /dit-is-een-contentpagina. Hoe weet het systeem dan welke Controller moet worden aangeroepen? En stel ik heb een subpagina onder een contentpagina waarvan de URL /dit-is-een-contentpagina/dit-is-een-contentpagina is?
Je kunt van specifiek naar generiek werken. Eerst koppel je specifieke routes zoals /nieuws/{slug} aan specifieke controllers. Daarna houd je een generieke rubriek 'overige' over voor de rest.

Hiervoor kun je bijvoorbeeld een algemene "content"-controller gebruiken die controleert of je (database)model "content pages" bevat voor een bepaalde URL c.q. route. Dat is een redelijk gebruikelijke oplossing voor webpagina's zoals algemene voorwaarden en een privacyverklaring.
@Ward van der Put,
Als ik je goed begrepen heb komen alle overige URL's uit bij de ContentController?
Maar stel ik wil /dit-is-een-contentpagina/dit-is-een-subpagina laden, hoe weet de controler dan dat /dit-is-een-subpagina geladen moet worden en niet /dit-is-een-contentpagina?
Dat kan bijvoorbeeld door zo'n controller op de / een onderscheid te laten maken tussen hoofdrubrieken, rubrieken, subrubrieken, sub-subrubrieken, enzovoort. Totdat er geen / meer over is: dan ben je bij een pagina aanbeland.
Kun je daarvan eens een voorbeeldje geven?
Ik begrijp niet helemaal wat je bedoelt.

Reageren