国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

服務(wù) ―― 分頁(yè)

2018-02-24 15:38 更新

服務(wù) —— 分頁(yè)

1、簡(jiǎn)介

在其他框架中,分頁(yè)是件非常痛苦的事,Laravel則使其變得輕而易舉。Laravel能夠基于當(dāng)前頁(yè)智能生成一定范圍的鏈接,且生成的HTML兼容Bootstrap CSS 框架。

2、基本使用

2.1 基于查詢構(gòu)建器分頁(yè)

有多種方式實(shí)現(xiàn)分頁(yè),最簡(jiǎn)單的方式就是使用查詢構(gòu)建器或Eloquent模型的paginate方法。該方法基于當(dāng)前用戶查看頁(yè)自動(dòng)設(shè)置合適的偏移(offset)和限制(limit)。默認(rèn)情況下,當(dāng)前頁(yè)通過(guò)HTTP請(qǐng)求查詢字符串參數(shù)?page的值判斷。當(dāng)然,該值由Laravel自動(dòng)檢測(cè),然后自動(dòng)插入分頁(yè)器生成的鏈接中。

讓我們先來(lái)看看如何在查詢上調(diào)用paginate方法。在本例中,傳遞給paginate的唯一參數(shù)就是你每頁(yè)想要顯示的數(shù)目,這里我們指定每頁(yè)顯示15個(gè):

<?php

namespace App\Http\Controllers;

use DB;
use App\Http\Controllers\Controller;

class UserController extends Controller{
    /**
     * 顯示應(yīng)用中的所有用戶
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::table('users')->paginate(15);
        return view('user.index', ['users' => $users]);
    }
}

注意:目前,使用groupBy的分頁(yè)操作不能被Laravel有效執(zhí)行,如果你需要在分頁(yè)結(jié)果中使用groupBy,推薦你手動(dòng)查詢數(shù)據(jù)庫(kù)然后創(chuàng)建分頁(yè)器。

2.1.1 “簡(jiǎn)單分頁(yè)”

如果你只需要在分頁(yè)視圖中簡(jiǎn)單的顯示“下一個(gè)”和“上一個(gè)”鏈接,可以使用simplePaginate方法來(lái)執(zhí)行該查詢。在渲染包含大數(shù)據(jù)集的視圖且不需要顯示每個(gè)頁(yè)碼時(shí)非常有用:

$users = DB::table('users')->simplePaginate(15);

2.2 基于Eloquent模型分頁(yè)

你還可以對(duì)Eloquent查詢結(jié)果進(jìn)行分頁(yè),在本例中,我們對(duì)User模型進(jìn)行分頁(yè),每頁(yè)顯示15條記錄。正如你所看到的,該語(yǔ)法和基于查詢構(gòu)建器的分頁(yè)差不多:

$users = App\User::paginate(15);

當(dāng)然,你可以在設(shè)置其它約束調(diào)價(jià)之后調(diào)用paginate,比如where子句:

$users = User::where('votes', '>', 100)->paginate(15);

你也可以使用simplePaginate方法:

$users = User::where('votes', '>', 100)->simplePaginate(15);

2.3 手動(dòng)創(chuàng)建分頁(yè)器

有時(shí)候你可能想要通過(guò)傳遞數(shù)組數(shù)據(jù)來(lái)手動(dòng)創(chuàng)建分頁(yè)實(shí)例,你可以基于自己的需求通過(guò)創(chuàng)建Illuminate\Pagination\PaginatorIlluminate\Pagination\LengthAwarePaginator實(shí)例來(lái)實(shí)現(xiàn)。

Paginator類(lèi)不需要知道結(jié)果集中數(shù)據(jù)項(xiàng)的總數(shù);然而,正因如此,該類(lèi)也沒(méi)有提供獲取最后一頁(yè)索引的方法。

LengthAwarePaginator接收參數(shù)和Paginator幾乎一樣,只是,它要求傳入結(jié)果集的總數(shù)。

換句話說(shuō),Paginator?對(duì)應(yīng)simplePaginate方法,而LengthAwarePaginator對(duì)應(yīng)paginate方法。

當(dāng)手動(dòng)創(chuàng)建分頁(yè)器實(shí)例的時(shí)候,應(yīng)該手動(dòng)對(duì)傳遞到分頁(yè)器的結(jié)果集進(jìn)行“切片”,如果你不確定怎么做,查看PHP函數(shù)array_slice。

3、在視圖中顯示分頁(yè)結(jié)果

當(dāng)你調(diào)用查詢構(gòu)建器或Eloquent查詢上的paginatesimplePaginate方法時(shí),你將會(huì)獲取一個(gè)分頁(yè)器實(shí)例。當(dāng)調(diào)用paginate方法時(shí),你將獲取Illuminate\Pagination\LengthAwarePaginator,而調(diào)用方法simplePaginate時(shí),將會(huì)獲取Illuminate\Pagination\Paginator實(shí)例。這些對(duì)象提供相關(guān)方法描述這些結(jié)果集,除了這些幫助函數(shù)外,分頁(yè)器實(shí)例本身就是迭代器,可以像數(shù)組一樣對(duì)其進(jìn)行循環(huán)調(diào)用。

所以,獲取到結(jié)果后,可以按如下方式使用Blade顯示這些結(jié)果并渲染頁(yè)面鏈接:

<div class="container">
    @foreach ($users as $user)
        {{ $user->name }}
    @endforeach
</div>

{!! $users->render() !!}

render方法將會(huì)將結(jié)果集中的其它頁(yè)面鏈接渲染出來(lái)。每個(gè)鏈接已經(jīng)包含了?page查詢字符串變量。記住,render方法生成的HTML兼容Bootstrap CSS 框架。

注意:我們從Blade模板調(diào)用render方法時(shí),確保使用{!!?!!}語(yǔ)法以便HTML鏈接不被過(guò)濾。

3.1 自定義分頁(yè)器URI

setPath方法允許你生成分頁(yè)鏈接時(shí)自定義分頁(yè)器使用的URI,例如,如果你想要分頁(yè)器生成形如http://example.com/custom/url?page=N的鏈接,應(yīng)該傳遞custom/urlsetPath方法:

Route::get('users', function () {
    $users = App\User::paginate(15);
    $users->setPath('custom/url');
    //
});

3.2 添加參數(shù)到分頁(yè)鏈接

你可以使用appends方法添加查詢參數(shù)到分頁(yè)鏈接查詢字符串。例如,要添加&sort=votes到每個(gè)分頁(yè)鏈接,應(yīng)該像如下方式調(diào)用appends

{!! $users->appends(['sort' => 'votes'])->render() !!}

如果你想要添加”哈希片段”到分頁(yè)鏈接,可以使用fragment方法。例如,要添加#foo到每個(gè)分頁(yè)鏈接的末尾,像這樣調(diào)用fragment方法:

{!! $users->fragment('foo')->render() !!}

3.3 更多幫助方法

你還可以通過(guò)如下分頁(yè)器實(shí)例上的方法訪問(wèn)更多分頁(yè)信息:

  • $results->count()
  • $results->currentPage()
  • $results->hasMorePages()
  • $results->lastPage() (使用simplePaginate時(shí)無(wú)效)
  • $results->nextPageUrl()
  • $results->perPage()
  • $results->total() (使用simplePaginate時(shí)無(wú)效)
  • $results->url($page)

4、將結(jié)果轉(zhuǎn)化為JSON

Laravel分頁(yè)器結(jié)果類(lèi)實(shí)現(xiàn)了Illuminate\Contracts\Support\JsonableInterface契約并實(shí)現(xiàn)toJson方法,所以將分頁(yè)結(jié)果轉(zhuǎn)化為JSON非常簡(jiǎn)單。

你還可以簡(jiǎn)單通過(guò)從路由或控制器動(dòng)作返回分頁(yè)器實(shí)例將轉(zhuǎn)其化為JSON:

Route::get('users', function () {
    return App\User::paginate();
});

從分頁(yè)器轉(zhuǎn)化來(lái)的JSON包含了元信息如total,?current_page,last_page等等,實(shí)際的結(jié)果對(duì)象數(shù)據(jù)可以通過(guò)該JSON數(shù)組中的data鍵訪問(wèn)。下面是一個(gè)通過(guò)從路由返回的分頁(yè)器實(shí)例創(chuàng)建的JSON例子:

{
   "total": 50,
   "per_page": 15,
   "current_page": 1,
   "last_page": 4,
   "next_page_url": "http://laravel.app?page=2",
   "prev_page_url": null,
   "from": 1,
   "to": 15,
   "data":[
        {
            // Result Object
        },
        {
            // Result Object
        }
   ]
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)