Een post bekijken - VIEW

Om een post te kunnen bekijken heb je minimaal 3 dingen nodig

  1. Route in router.php bv.
    $route->get('posts-show/{id}','controllers/posts-show.php');
  2. Controller bv. posts-show.php
  3. View posts-show.view.php
  4. Optioneel een linkje naar de betreffende pagina
    <a href="posts-show/67">Show post 67</a>

    Of dynamisch (bv)

    <a href="/posts-show/<?= $post['id'] ?>" class="text-indigo-500">Open</a>

Route

In de route zie je {id} dit is een manier om het id (primaire sleutel) van een post te kunnen meesturen. Op die manier weet je welke post je uit de database moet ophalen.

In de controller kan je dan gebruik maken van

$request->id

Indien je op de link van item 4 klikt zal het $request->id 67 zijn

Controlller

In de controller zullen de volgende stappen worden genomen.

  1. Valideren of id is meegestuurd
  2. Database object aanmaken
  3. De betreffende post ophalen uit de database dmv een query
  4. Indien er niets gevonden wordt sturen we de gebruiker naar een 404 pagina niet gevonden.
  5. De post meegeven aan de view
<?php
// stap 1 valideren of de id bestaat
$request->validate([
    'id' => 'required'
]);

// stap 2 database Object aanmaken
$db = new Database();

// stap 3 query uitvoeren
$post = $db->query("SELECT * FROM posts WHERE id = :id", [
    'id' => $request->id
])->fetch();

// stap 4 controleren of de post bestaat
if(!$post) {
    abort(404);
}

// stap 5 post meegeven aan de view
view("posts-show", [
    'post' => $post
]);

Bij stap 1 wordt de validatie gedaan. Dit stukje zal later nog worden toegelicht in paragraaf K Validatie

In stap 4 zie je if( !$post){    De ! hierin betekent not. Dus als de $post null of leeg is

View

De view is niet heel spectaculair, als het goed is beschik je al over de kennis om die zelf in te vullen

 

Opgave J2.1

Maak de route aan in router.php (code staat bij stap 1)
Maak de controller app/controllers/posts-show.php en copy de juiste code hierin
Maak de view app/views/posts-show.view.php en zorg dat de juiste gegevens van de post zichtbaar zijn. Minimaal de title en content.

Tip. Copy-paste de code van een reeds bestaande view en pas aan wat nodig.

 

Uitwerking

app/router.php
app/controllers/posts-show.php
app/views/posts-show.view.php

 

Tonen van gebruiker bij post

Een post is gemaakt door een bepaalde gebruiker. In de database is dit aangegeven in het veld user_id.

Het zou natuurlijk mooi zijn om bij het tonen van een post ook de betreffende gebruiker op het scherm te tonen.

 

Opgave J2.2

Pas de query in de controller aan zodat ook de gegevens van de schrijver van de post worden opgehaald.

Pas de view aan zodat ook de schrijver van de post wordt getoond.

 

Uitwerking

app/controllers/posts-show.php

app/views/posts-show.view.php

 

De posts-show nuttig gebruiken

In onze overzichtspagina 'posts' staat nu bij elke tekst een lange tekst. Deze teksten gaan we inkorten en een 'lees meer' toevoegen.
Als je op 'lees meer' klikt ga je naar de show pagina.

De 'lees meer' is een link naar /posts-show/id waarbij het id het id van de post.

De tekst inkorten kan d.m.v. de PHP functie substr()

substr("Hello world!", 0, 5); // outputs "Hello"
substr("Hello world!", 0, 3); // outputs "Hel"

En link kan er bijvoorbeeld zo uit zien

<a href="/posts-show/<?= $post['id'] ?>" class="text-indigo-500">...lees meer</a>

 

Opgave J2.3

Kort de content van de post in tot 25 tekens d.m.v. substr() en zet daarachter een link om meer te lezen

 

Uitwerking

/app/views/posts.view.php