用Slim Framework和Laravel的Eloquent ORM分页

时间:2013-10-06 22:00:49

标签: php laravel-4 twig eloquent slim

我使用Slim Framework作为路由器,Twig作为模板引擎和Eloquent ORM来处理数据库。

我为这些库创建了引导程序。

<?php

require_once 'vendor/autoload.php';

/**
 * Laravel Eloquent ORM
 */
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;

$database_capsule = new Capsule;

$database_capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'database',
    'username'  => 'username',
    'password'  => 'password',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

$database_capsule->setEventDispatcher(new Dispatcher(new Container));

$database_capsule->setAsGlobal();

$database_capsule->bootEloquent();

/**
 * Twig Template Engine
 */
Twig_Autoloader::register();

$twig_loader = new Twig_Loader_Filesystem('template');

$twig_engine = new Twig_Environment($twig_loader);

路线:

/**
 * Slim Framework
 */
$application = new \Slim\Slim();

$application->get('/', function () use ($twig_engine) {

    $foods = Capsule::table('foods')->get();

    $index = $twig_engine->loadTemplate('index.html');

    echo $index->render(array('foods' => $foods));

});

$application->get('/page/:number', function ($number) use ($twig_engine) {

    $foods = Capsule::table('foods')->get();

    $index = $twig_engine->loadTemplate('index.html');

    echo $index->render(array('foods' => $foods));

});

$application->run();

我想要的是:我如何对结果进行分页:

$foods = Capsule::table('foods')->get();

考虑到我有&#34;两个&#34;页面,&#34; /&#34;和&#34; / page / 1&#34;例如。

在每个页面中,我想要最多30个结果。

2 个答案:

答案 0 :(得分:5)

从照明4开始你可以做这样的事情

$application->get('/page/:number', function ($number) use ($twig_engine) {

    $foods = Capsule::table('foods')->skip(30*$number)->take(30)->get();
    $index = $twig_engine->loadTemplate('index.html');

    echo $index->render(array('foods' => $foods));

});

更好的解决方案是包含Illuminate \ Pagination包并使其与

一起使用
Capsule::table('foods')->paginate(5) 

然而,我不知道如何在laravel之外引导分页课程。

考虑一下https://github.com/zofe/rapyd-framework 它使用Slim,Twig,Eloquent,Symfony Forms ..但是用于分页的自定义小部件。 (我是作者)

答案 1 :(得分:1)

  1. 打开composer.json
  2. 在需要部分添加此行:

    "illuminate/pagination":"~5.0"

  3. 打开Ubuntu 14.04终端并转到项目目录。运行composer update命令。它将下载您的分页库。

  4. 在模型文件中添加这两行

    use Illuminate\Pagination;

    use Illuminate\Pagination\Paginator;

  5. 在您的控制器中放置此代码,您将获得分页数据。

    $data = Student::paginate(5);

  6. 为了在视图文件中获取分页链接。

    $students->links();