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)

<?php
namespace App\Models;
class Post
{
}
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;
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;
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_\-]+');