Tutoriel Laravel 9 #8 : Moteur de recherche

La fonction de recherche est une fonctionnalité fondamentale pour presque tous les sites Web, et dans cet article, nous allons parler de la façon d’implémenter une recherche de base dans notre projet Laravel.

Une fonction de recherche se compose de trois parties, un formulaire de recherche qui permet aux utilisateurs de transmettre des requêtes au back-end, un morceau de code qui effectue la recherche, et une vue qui affiche les résultats de la recherche.

Formulaire de recherche

Examinons d’abord le formulaire de recherche. Pour notre modèle, le formulaire de recherche se trouve à l’adresse suivante sidebar.blade.php

    <!-- Search Widget -->
    <div class="card my-4">
        <h5 class="card-header">Recherche</h5>
        <form class="card-body" action="/search" method="GET" role="search">
            {{ csrf_field() }}
            <div class="input-group">
                <input type="text" class="form-control" placeholder="Rechercher..." name="q">
                <span class="input-group-btn">
            <button class="btn btn-secondary" type="submit">Go!</button>
          </span>
            </div>
        </form>
    </div>


La ligne 4, on ajoute l’action /search pour rediriger vers le contrôleur.

La ligne 5, ajoute la protection CSRF au champ.

Ligne 7, ajoute name à l’attribut input sa valeur peut être n’importe quoi, ici nous l’appellerons q.

Lorsque l’on clique sur le bouton, on se dirige vers /search 

Nous devons donc enregistrer le route correspondante.

Route::get('/search', [PostController::class, 'search']);

Cette route pointe vers le search() de la méthode PostController.

Méthode de recherche

Maintenant, il est temps pour nous d’ajouter l’option search() à la méthode PostController.

    public function search(Request $request)
    {
        $key = trim($request->get('q'));

        $posts = Post::query()
            ->where('title', 'like', "%{$key}%")
            ->orWhere('content', 'like', "%{$key}%")
            ->orderBy('created_at', 'desc')
            ->get();

        $categories = Category::all();

        $tags = Tag::all();

        $recent_posts = Post::query()
            ->where('is_published', true)
            ->orderBy('created_at', 'desc')
            ->take(5)
            ->get();

        return view('search', [
            'key' => $key,
            'posts' => $posts,
            'categories' => $categories,
            'tags' => $tags,
            'recent_posts' => $recent_posts
        ]);
    }

Ligne 9, le like est ici un opérateur. Laravel va trouver le titre qui est similaire à la requête qui a été envoyée par l’utilisateur.

Vue des résultats de la recherche 

search.blade.php

@extends('master')

@section('meta')
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="{{setting('site.description')}}">
    <meta name="author" content="Gekkode">
@endsection

@section('title')
    <title>{{setting('site.title')}}</title>
@endsection

@section('content')
    <div class="row">
        <!-- Blog Entries Column -->
        <div class="col-md-8">

            <h1 class="my-4">Résultat de recherche pour:
                <small>{{$key}}</small>
            </h1>

            @include('_partials.posts-list')

        </div>
        @include('_partials.sidebar')
    </div>
@endsection

Tutoriel Laravel 9

Nouveau Tutoriel

Newsletter

Ne manquez jamais les nouveaux conseils, tutoriels et autres.

Pas de spam, jamais. Nous ne partagerons jamais votre adresse électronique et vous pouvez vous désabonner à tout moment.