Post model maken

Om de werking van de volgende elementen goed werkend te krijgen, moeten we aan de gang met OOP binnen Laravel. Hierdoor kunnen wij makkelijker code hergebruiken of structureren.

Om te beginnen kan je in app/Models/ een class aanmaken. Hieronder een voorbeeld van Post class (Post object)

Schermafbeelding 2022-11-13 om 15.21.23.png

<?php

namespace App\Models;

class Post
{
    
}

Static functions

Zet de code van je routes/web.php van de overzicht pagina om in een method van je class (andere woorden voor een method is een function)

Hier een voorbeeld van de static function find(). Deze plaats je in je nieuwe model/Class Post.php

public static function find($slug){
				$path = resource_path("posts/{$slug}.html");

        if (! file_exists($path)) {
            throw new ModelNotFoundException();
        }
    
        return cache()->remember("posts.{$slug}", 5, fn() => file_get_contents($path));
}

Binnen de bovenstaande functie zien we een optie staat: **throw new ModelNotFoundException();**

Deze functionaliteit zit standaard in Laravel, alleen moeten we de class wel laten weten waar de functie staat. Die doen we bovenin de class. Kijk naar het volgende voorbeeld.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\ModelNotFoundException;

Aanroepen in routes/web.php

Om te zorgen dat de Model Class Post binnen je routes/web.php te lezen is, moeten we bovenin de web.php het volgende aangeven.

<?php

use App\Models\Post;
use Illuminate\Support\Facades\Route;

Routes van posts

Route::get('post/{post}', function ($slug) {
   $post = Post::find($slug);

    return view('post', [
        'post' => $post 
    ]);
})->where('post','[A-z_\-]+');

Of nog mooier:

Route::get('post/{post}', function ($slug) {
    return view('post', [
        'post' => Post::find($slug)
    ]);
})->where('post','[A-z_\-]+');