recherche

Maison  >  Questions et réponses  >  le corps du texte

Modifier les valeurs de pagination dans la méthode du modèle Laravel en interceptant les requêtes

Dans mon application Laravel, j'ai un point d'entrée API où je collecte les données initiales pour mon application, comme j'obtiens des résultats paginés pour les publications, les tags, les utilisateurs...

J'utilise paginate:15 pour tous les enregistrements, mais pour les utilisateurs, je souhaite utiliser paginate:30 car dans les paramètres de ma requête, j'ai quelque chose comme ceci :

page=1&paginate=15

Y a-t-il un moyen de le changer à 30 dans ma méthode de contrôleur

Contrôleur initial

$users = $this->userService->getUsersPaginated($request);
$users = $this->vuePaginate($users);

Dans mon modèle utilisateur :

public function getUsersPaginated($request)
    {
        
        $users = User::
        paginate($request['paginate']);
        


        return $users;
    }
P粉295728625P粉295728625275 Il y a quelques jours705

répondre à tous(2)je répondrai

  • P粉127901279

    P粉1279012792024-03-23 12:20:23

    En fonction du type d'utilisateur, évaluez si la taille de la pagination peut être gérée sur le frontend.

    Quoi qu'il en soit, si vous souhaitez le gérer sur le backend, vous pouvez trouver une condition pour définir la taille de la pagination.
    Par exemple :

    if ($currentUser->role == 'final-user')  // 或类似的条件
       $perPage = max (30, $request['paginate']);
    else
       $perPage = $request['paginate'];
    
    $users = User::paginate($perPage);

    Je vous recommande également de définir une valeur minimale et maximale pour la pagination afin d'éviter les problèmes avec des valeurs erronées depuis le frontend (imaginez si vous obtenez une valeur comme 1 000 000 ou -1)

    const DEFAULT_RESULTS_PER_PAGE = 15;
    const FINAL_USER_RESULTS_PER_PAGE = 30;
    const MAX_RESULTS_PER_PAGE = 100;
    
    /* ... */
    
    public function getUsersPaginated($request)
    {
        $perPage = min (max ($request['paginate'] ?: self::DEFAULT_RESULTS_PER_PAGE, 1), self::MAX_RESULTS_PER_PAGE);
    
        if (/* condition */)
            $perPage = max (self::FINAL_USER_RESULTS_PER_PAGE, $perPage);
    
        $users = User::paginate($perPage);
    
        /* ... */

    Notez également que la variable de requête de pager par défaut est per_page

    répondre
    0
  • P粉092737458

    message de réponse

    P粉092737458 · 2024-03-27 11:28:55
  • Annulerrépondre