>  기사  >  PHP 프레임워크  >  Laravel을 사용하여 페이징 기능을 구현하는 방법

Laravel을 사용하여 페이징 기능을 구현하는 방법

PHPz
PHPz원래의
2023-04-19 10:09:142798검색

Laravel은 많은 최신 기능과 개발 친화적인 도구를 제공하는 인기 있는 PHP 개발 프레임워크로, 개발자가 웹 사이트와 애플리케이션을 보다 효율적으로 구축할 수 있도록 해줍니다. 웹 애플리케이션을 개발하는 과정에서 쿼리 결과를 페이지에 표시해야 하는 경우가 종종 있습니다. 이 글에서는 Laravel을 사용하여 페이징 기능을 구현하는 방법을 소개합니다.

1. 페이징 소개

페이징이란 많은 양의 데이터를 여러 페이지로 나누어 표시하는 방식을 말하며 일반적으로 각 페이지에 표시할 데이터의 양이 이보다 많을 경우를 설정합니다. 값을 입력하면 페이지가 자동으로 넘어갑니다. 이 접근 방식을 사용하면 페이지 로딩 시간과 대역폭 사용량을 크게 줄일 수 있어 사용자가 데이터를 더 쉽게 보고 탐색할 수 있습니다.

2. Laravel 페이징 작업

Laravel은 페이징 기능을 구현하기 위해 Paginator 클래스를 제공합니다. 쿼리 결과 객체를 Paginator의 make 메소드에 전달하고 각 페이지에 표시할 데이터의 양을 지정하여 페이징 인스턴스를 얻을 수 있습니다. 인스턴스에서 render 메소드를 호출하면 Laravel이 자동으로 페이지 매김 링크를 생성할 수 있습니다.

구체적인 코드 구현을 살펴보겠습니다.

  1. Laravel 설치

다음 명령을 실행하여 Laravel을 설치하세요:

composer create-project --prefer-dist laravel/laravel blog
  1. Mysql 데이터베이스 테이블 생성

데이터베이스 테이블 아티클 생성 및 일부 샘플 데이터 삽입:

CREATE TABLE `articles` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `body` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 1', 'This is article 1 content', '2021-01-01 12:00:00', '2021-01-01 12:00:00');
INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 2', 'This is article 2 content', '2021-01-02 12:00:00', '2021-01-02 12:00:00');
INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 3', 'This is article 3 content', '2021-01-03 12:00:00', '2021-01-03 12:00:00');
INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 4', 'This is article 4 content', '2021-01-04 12:00:00', '2021-01-04 12:00:00');
  1. 앱에서 아티클 모델 정의

/Models app/Http/Controllers 디렉터리에 ArticlesController.php 파일을 생성하고 다음 코드를 추가합니다:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use HasFactory;

    protected $fillable = [&#39;title&#39;, &#39;body&#39;];

    public function getDateAttribute()
    {
        return $this->created_at->format('Y-m-d');
    }
}
  1. Define ArticlesController

resources/views 디렉터리에 기사 디렉터리를 생성하고 index.blade.php를 생성합니다. 이 디렉터리에 파일을 저장하고 다음 코드를 추가합니다.
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Models\Article;
    
    class ArticlesController extends Controller
    {
        public function index(Request $request)
        {
            $articles = Article::paginate(2);
            
            return view(&#39;articles.index&#39;, compact(&#39;articles&#39;));
        }
    }
  1. Analytics:

먼저 foreach 루프에 각 기사를 표시합니다.

$article->title 및 $article->body 속성을 사용하여 Article 모델에서 기사 제목과 본문을 가져옵니다.

    $article->date 속성에서 기사 게시 날짜를 가져옵니다.
  • $articles->links() 메소드를 호출하면 Laravel이 자동으로 페이지 매기기 링크를 생성합니다.
  • 페이지 스타일 정의
public/css 디렉터리에 app.css 파일을 생성하고 다음 코드를 추가하세요.
    @extends('layouts.app')
    @section('content')
        <div class="container">
            <div class="row">
                <div class="col-md-8">
                    @foreach($articles as $article)
                        <div class="card mb-3">
                            <div class="card-header">
                                {{ $article->title }}
                            </div>
                            <div class="card-body">
                                <p class="card-text">{{ $article->body }}</p>
                            </div>
                            <div class="card-footer text-right">
                                <small class="text-muted">{{ $article->date }}</small>
                            </div>
                        </div>
                    @endforeach
                    {{ $articles->links() }}
                </div>
            </div>
        </div>
    @endsection
  1. resources/views/layouts 디렉터리의 app.blade.php 파일에 다음을 추가하세요. 다음 코드 :
  2. .card {
        margin-bottom: 20px;
    }
    .pagination {
        margin-top: 20px;
    }
분석:

app.blade.php에 Bootstrap4 CSS 스타일을 추가했습니다.

Bootstrap 4의 JS 파일도 소개했지만 Laravel에는 필요한 JS 파일을 public/js/app.js 파일에 자동으로 패키징할 수 있는 Webpack 패키징 도구가 포함되어 있으므로 수동으로 소개할 필요는 없습니다.

  • 페이징 기능 테스트
http://127.0.0.1:8000/articles를 방문하면 기사 목록이 표시된 것을 확인할 수 있으며 페이징 링크를 통해 여러 페이지 간에 전환할 수 있습니다.
  1. 여기서 주목해야 할 점은 컨트롤러에서 paginate 메소드를 호출할 때 전달된 매개변수 2가 페이지에 표시할 데이터 조각 수를 나타낸다는 것입니다. 이 값을 너무 작게 설정하면 페이지에 많은 페이지 매김 링크가 있어 페이지 혼란이 발생합니다. 이 값을 너무 크게 설정하면 페이지에 표시되는 데이터의 양이 너무 많아 오랫동안 요청이 차단되어 페이지 열기 속도에 영향을 미칩니다. , 메모리 오버플로 등의 문제를 일으키기도 하므로 실제 상황에 맞게 신중하게 설정해야 합니다.
3. 요약

Laravel은 페이징 기능을 구현하기 위해 더 적은 코드로 쉽게 구현할 수 있는 강력한 Paginator 클래스를 제공합니다. 이 기사에서는 Paginator를 사용하여 MySQL 데이터베이스의 데이터를 페이지에 표시하는 방법을 소개합니다. 또한 페이지를 매긴 결과에서 모델 속성을 사용하는 방법도 보여주었습니다. 웹사이트나 애플리케이션을 개발할 때 많은 양의 데이터를 표시해야 할 때 페이징은 사용자 경험을 크게 향상시킬 뿐만 아니라 서버 오버헤드를 효과적으로 줄일 수 있는 필수 기능입니다.

위 내용은 Laravel을 사용하여 페이징 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.