`
xieye
  • 浏览: 837554 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

doctrine分页组件pagerfanta单独使用完全攻略

    博客分类:
  • PHP
阅读更多
为了独立使用composer,不依赖框架。
假设当前使用的db类库是doctrine,则分页该怎么用?
本代码完全脱离symfony环境。只加载对应的db类库,故意不使用模板,让代码含义更加清晰。

composer
{
    "require": {
        "doctrine/dbal":"2.5.12",
        "pagerfanta/pagerfanta":"1.0.5"
    }
}


建表
CREATE TABLE `test_databases` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `db_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '库名',
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '测试用户id',
  `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB


请自行插入一百条数据。

假设本机项目域名www.t3.com
本代码网址
http://www.t3.com/paginator/doctrine
首页只需输入上面网址即可,点击分页链接,会自动加page查询参数。

<?php

namespace app\control;
// use Illuminate\Database\Capsule\Manager as Capsule;
// // use \Illuminate\Events\Dispatcher;
// // use \Illuminate\Container\Container;
// use Illuminate\Pagination\UrlWindow;

use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;

use Pagerfanta\Adapter\DoctrineDbalAdapter;
use Pagerfanta\Pagerfanta;
use Pagerfanta\View\DefaultView;

class Paginator {
   
    public function doctrine( $req, $res, $args) {


        $config = new Configuration();
        //..
        $connectionParams = array(
        		'dbname' => 'test1',
        		'user' => 'root',
        		'password' => 'root',
        		'host' => '127.0.0.1',
        		'driver' => 'pdo_mysql',
                'charset'=>'UTF8',
        );
        $conn = DriverManager::getConnection($connectionParams, $config);
        
        //构造查询语句。
        $queryBuilder = new QueryBuilder($conn);
        $queryBuilder->select('p.*')->where("p.id < 100")->from('test_databases', 'p')
           ->orderBy("p.id","asc");
        
        $countQueryBuilderModifier = function ($queryBuilder) {
            $queryBuilder->select('COUNT(*) AS total_results')
                  ->setMaxResults(1);
        };
        $adapter = new DoctrineDbalAdapter($queryBuilder, $countQueryBuilderModifier);
        $pagerfanta = new Pagerfanta($adapter);
        
        $page = intval( $_GET["page"]);
        if (!$page) {
            $page=1;
        }
        
        //设置当前页,最大页面。
        $pagerfanta->setMaxPerPage(4)->setCurrentPage($page);
        
        //打印当前页面的结果
        foreach ($pagerfanta->getCurrentPageResults() as $v ) {
            echo $v['db_name'] .' = ' . $v['user_id']."<br>";
        }
        
        //打印分页链接。
        $routeGenerator = function($page) { // 匿名函数解决链接字符串
            return '/paginator/doctrine?page='.$page;
        };
        $view = new DefaultView();
        $options = array('proximity' => 3); // 这个数字干嘛用?中间的链接个数=这个数字*2+1,这个数字一般取3.
        $html = $view->render($pagerfanta, $routeGenerator, $options);
        echo $this->default_css();
        echo  "<div class='pagerfanta'>" .$html."</div>";
        
        
        
        return $res;
        
    }
    
    private function default_css()
    {
        $css=<<<css
        <style>
        .pagerfanta {
}

.pagerfanta a,
.pagerfanta span {
    display: inline-block;
    border: 1px solid blue;
    color: blue;
    margin-right: .2em;
    padding: .25em .35em;
}

.pagerfanta a {
    text-decoration: none;
}

.pagerfanta a:hover {
    background: #ccf;
}

.pagerfanta .dots {
    border-width: 0;
}

.pagerfanta .current {
    background: #ccf;
    font-weight: bold;
}

.pagerfanta .disabled {
    border-color: #ccf;
    color: #ccf;
}



.pagerfanta a,
.pagerfanta span {
    border-color: blue;
    color: blue;
}

.pagerfanta a:hover {
    background: #ccf;
}

.pagerfanta .current {
    background: #ccf;
}

.pagerfanta .disabled {
    border-color: #ccf;
    color: #cf;
}
        </style>
css;
        return $css;
    }
}


效果展示





  • 大小: 9.4 KB
  • 大小: 9.9 KB
  • 大小: 11.6 KB
  • 大小: 13.1 KB
分享到:
评论

相关推荐

    Doctrine缓存组件_PHP_下载.zip

    Doctrine 是一个流行的 ORM(对象关系映射)库,但其缓存组件不仅可以与 ORM 配合使用,也可以独立于 ORM 运行,用于存储任何类型的数据。 首先,让我们了解一下什么是缓存。缓存是一种存储临时数据的技术,目的是...

    Pagerfanta一个分页库

    Pagerfanta提供了方便的视图组件,如`TwitterBootstrap3View`,可以帮助你快速创建符合Bootstrap样式的分页链接。 **Pagerfanta的扩展性** 除了基本的分页功能,Pagerfanta还支持自定义分页策略,如跳跃分页(skip...

    Doctrine Cache:一个使用的php缓存类库

    Doctrine Cache是一个轻量级且易于使用的组件,它为PHP开发人员提供了丰富的API,用于管理和操作各种类型的缓存。通过这个库,开发者可以快速实现对数据的缓存,并且能够灵活地选择不同的存储引擎,以适应项目需求...

    缓存:Doctrine缓存组件

    **二、使用Doctrine缓存组件** 1. **配置缓存驱动**:在项目的配置文件中,你需要指定使用的缓存驱动类型,以及相应的连接参数。例如,使用Memcached时,需要设置服务器地址、端口等。 ```yaml doctrine: orm: ...

    Doctrine Cache:一个使用的php缓存类库.zip

    在本文中,我们将深入探讨Doctrine Cache的核心概念、特性以及如何在实际项目中应用。 1. **核心概念** - **Cache Provider**: Doctrine Cache支持多种缓存后端,包括APC, Memcached, Redis, SQLite等。这些后端...

    doctrine1.0.0参考手册

    本手册详细介绍了如何开始使用Doctrine,包括其安装、配置、项目启动、已有数据库的适配、表的创建、模型生成、自动加载模型以及命令行接口的使用。 1. 开始使用 - 要求:确保你的开发环境已经安装了PHP和PDO扩展...

    doctrine-orm

    Doctrine2的核心组件包括Doctrine ORM、Doctrine DBAL(数据库抽象层)以及Doctrine Common(通用功能库)。其中,Doctrine ORM是整个框架的核心,它负责映射对象到关系型数据库,以及处理对象的持久化。 从给定...

    Laravel开发-laravel-doctrine

    5. **使用 Doctrine**:现在你可以像在 Laravel 中使用 Eloquent 一样使用 Doctrine 进行数据操作,例如创建、读取、更新和删除记录。 ** doctrine 的主要特性** 1. **实体**:实体是 ORM 中的核心,它们代表数据库...

    Doctrine2 ORM 官方文档

    本文档基于**Doctrine2 ORM官方文档**,主要介绍了其核心功能、使用方法以及高级特性。 #### 二、获取帮助 - **常见问题解答 (FAQ)**:提供了一些关于Doctrine2 ORM的常见问题及其解决方案。 - **邮件列表**:通过...

    Laravel开发-doctrine-repository

    在Laravel中,Eloquent ORM是默认的ORM,但有些开发者更倾向于使用Doctrine,因为它提供了更多灵活性和高级特性。 在`Laravel开发-doctrine-repository`项目中,我们可以看到以下关键知识点: 1. **Repository模式...

    52、文章列表的分页1

    "Symfony 文章列表分页实现" ...同时,使用 Symfony 框架提供的paginator组件,可以轻松实现分页功能,提高开发效率。 使用 Doctrine Paginator 可以轻松实现文章列表的分页功能,提高应用程序的性能和开发效率。

    Laravel开发-laravel-doctrine-cache

    Laravel-doctrine-cache是Laravel与Doctrine结合时,用于优化查询性能的一个关键组件。 在Laravel框架中,缓存是提升应用程序性能的重要工具。它允许我们将常用的数据存储在内存中,从而避免频繁的数据库查询,提高...

    doctrine 手册

    ### Doctrine 手册知识点概述 #### 一、简介与安装 **标题与描述解析:** - **标题**:“Doctrine 手册”明确指出这是一份关于Doctrine框架的手册。 - **描述**:介绍Doctrine作为PHP的ORM(对象关系映射)框架,...

    Pagerfanta:PHP应用程序的分页库,支持多个数据提供程序

    佩吉尔芬塔 Pagerfanta是一个PHP库,它通过支持许多数据提供程序来帮助计算和呈现分页列表。此软件包是原始软件包的延续。文献资料请访问以获取有关如何使用此软件包的详细信息。安全如果您认为已发现此程序包存在...

    doctrine的demo

    标题"doctrine的demo"指的是使用Doctrine这个数据库对象关系映射(ORM)框架的一个示例项目。ORM是一种编程技术,它允许开发者使用面向对象的编程语言来操作数据库,而无需关注底层SQL的细节。Doctrine是PHP中广泛...

    Laravel开发-laravel5-doctrine

    然而,有些开发者可能更倾向于使用Doctrine,因为它提供了更多高级功能,如对多对多关联的复杂处理、更灵活的查询构造器(Query Builder)以及对其他数据库系统的支持。要将Doctrine与Laravel结合,你需要安装`...

    Laravel开发-lumen-oauth2-doctrine

    **三、Lumen-OAuth2-Doctrine 配置与使用** 1. **安装**:首先,你需要通过 Composer 将 `nordsoftware/lumen-oauth2-doctrine` 和 `league/oauth2-server` 添加到 Lumen 项目的依赖中。 2. **配置**:配置 OAuth2 ...

    Laravel开发-laravel-doctrine-tenancy

    在Laravel中,Doctrine通常与Eloquent ORM一起使用,Eloquent是Laravel自带的ORM,但在某些复杂场景下,如多租户,开发者可能会选择使用更强大的Doctrine。 Laravel Doctrine Tenancy是一个专门为Laravel设计的扩展...

    CodeIgniter-和-Doctrine-从零开始

    在实际项目中,你可能学习如何在CodeIgniter中集成Doctrine,包括安装扩展、配置文件设置、以及如何在CodeIgniter的控制器和模型中使用Doctrine的服务。你还将探索事务处理、懒加载、关联映射等高级特性,这些都将极...

Global site tag (gtag.js) - Google Analytics