Laravel框架 前後端分離開發模式 實現 分頁。

實現的功能模塊:獲取文章列表

  • 簡要描述:獲取推薦文章列表接口 (按發佈時間排序,最新發布的在前面)
  • 請求URL:http://xx.com/api/article/recommend?page=1&numberOfPage=2
  • 請求方式: GET
  • 參數: (1)page  【必填   int    第幾頁】。 (2)numberOfPage  【必填   int   每頁的個數】。
  • 返回示例:
//成功返回Json字段:
{
    "code":200,
    "message":"",
    "data":{
        "pagination":{
            "currentPage":1,//當前頁數
            "totalPage":100,//總頁數
        },
        "article":[
            {
                "title":"文章標題",
                "summary":"文章摘要",
                "content":"",//文章正文,富文本
                "update_at":"1012362541", //文章修改的時間戳
                "recommend":true //是否是推薦文章
            },
            {
                "title":"文章標題",
                "summary":"文章摘要",
                "content":""//文章正文,富文本
                "update_at":"1012362541", //文章修改的時間戳
                "recommend":true //是否是推薦文章
            },
        ]
    }
}


//失敗返回Json字段: 
{
    "code":403,
    "error": "獲取推薦文章失敗或沒有推薦文章"
}

【開發分工】:開後端分離。

【開發環境】:Laravel 框架 5.6  +  php7.1 + phpStudy + Mysql

【完成分頁前後端工程師的責任】:

                 1)前端工程師: 前端完成分頁頁面和文章列表頁面,然後規定好訪問該接口的請求(路由),爲後端通過請求提供兩個參數:page 當前第幾頁 和  numberOfPage 每頁顯示的個數。

                 2)後端工程師:後端 根據 前端工程師 規定的 請求 來 創建 對應的  路由Route--->控制器Controller-->模型Model--->方法function , 然後在方法中 通過request 對象 來獲取到 前端提供的兩個參數。 然後再通過 Eloquent數據庫操作 中的  paginate()方法來獲取到 對應的 數據。 

Laravel框架 的  paginate($numberOfPage):會自動的 從 GET請求中獲取到page參數,paginate方法完成分頁之後通過dd或者dump打印出來數據 就會顯示 第page頁的數據 。page這個參數會被laravel的paginate方法自動獲取,獲取後顯示對應頁數的數據。

以下 是 我的 代碼: 

路由:

Route::get('article/recommend','Api\Article\RecommendController@queryRecommend')->name('queryRecommend');

控制器及其方法: 

class RecommendController extends BaseController
{
    //微信用戶   獲取推薦文章列表
    public function queryRecommend(Request $request){
        $numberOfPage = $request->numberOfPage; //每頁顯示幾個。
        $article = Article::where('recommend',1)->orderBy('updated_at','desc')->paginate($numberOfPage); //recommend=1爲推薦。
        if($article!=null){ //說明查出來數據了。
            $articleJSON = json_encode($article);
            $newArticle = json_decode($articleJSON);
            $arrayArticle = $newArticle->data;
            for($i=0;$i<count($arrayArticle);$i++){
                if($arrayArticle[$i]->recommend==1){
                    $arrayArticle[$i]->recommend = true ; 
                }
                if($arrayArticle[$i]->recommend==0){
                    $arrayArticle[$i]->recommend = false ; 
                }
            }
            return $this->success([
                "pagination"=>["currentPage"=>$newArticle->current_page,"totalPage"=>$newArticle->last_page],
                "article"=>$newArticle->data
            ], "獲取推薦文章成功");
        }else{
            return $this->error("獲取推薦文章失敗或沒有推薦文章", 403);
        }
        
    }
}

涉及到的方法:

 protected function success($data = [], $msg = 'success'){
        return response()->json([
            "code"=>200,
            "massage"=>$msg,
            "data"=>$data
        ]);
    }

    protected function error($msg, $code = 0){
        return response()->json([
            'code' => $code,
            'error' => $msg
        ]);
    }

—————————————————————————————————————————

我的意見: 

1. 你最好編寫一段  下面的代碼看一下【分頁完成後】的  數據結構

$articleInfo = Article::paginate($numberOfPage );

dd($articleInfo);

2. 然後再執行:

dd($articleInfo->current_page); 該對象中的current_page取不出來。

3. 然後在執行: 

dd(json_encode($articleInfo)); 將$articleInfo轉換成了json格式的字符串,查看一下當前的 結構。 

4. 然後再執行: 

$newArticle = json_decode(json_encode($articleInfo));  將這個$articleInfo對象 轉換成 標準格式的 對象。

dd($newArticle->current_pag);該對象中的current_page 可以取出來 。

5. 最後你可以在看一下$newArticle 與 $articleInfo 的結構有什麼不同: 

dd($newArticle);

dd($articleInfo);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章