搜尋

首頁  >  問答  >  主體

透過攔截請求在Laravel模型方法中修改分頁值

在我的Laravel應用程式中,我有一個API入口點,在這裡我收集我的應用程式的初始數據,例如我獲取帖子、標籤、用戶的分頁結果...

我對所有記錄使用paginate:15,但對於用戶,我想使用paginate:30,因為在我的請求參數中有類似這樣的內容:

page=1&paginate=15

有沒有辦法在我的控制器方法內將它改為30

初始控制器

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

在我的User模型中:

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


        return $users;
    }
P粉295728625P粉295728625311 天前767

全部回覆(2)我來回復

  • P粉127901279

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

    根據使用者類型,評估是否可以在前端處理分頁大小。

    無論如何,如果您想在後端處理它,您可以找到一個條件來設定分頁大小。
    例如:

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

    我還建議您為分頁設定一個最小值和最大值,以避免來自前端的錯誤值引起問題(想像一下如果您得到一個像1,000,000或-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);
    
        /* ... */

    也要注意,預設的分頁器請求變數是per_page

    回覆
    0
  • P粉092737458

    回覆訊息

    P粉092737458 · 2024-03-27 11:28:55
  • 取消回覆