Modifier les valeurs de pagination dans la méthode du modèle Laravel en interceptant les requêtes
P粉295728625
P粉295728625 2024-03-22 14:16:16
0
2
717

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粉295728625
P粉295728625

répondre à tous(1)
P粉127901279

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 message de réponse
    P粉092737458 auteur 2024-03-27 11:28:55
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal