實現的功能模塊:獲取文章列表
- 簡要描述:獲取推薦文章列表接口 (按發佈時間排序,最新發布的在前面)
- 請求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);