【问题标题】:Laravel 5 Pagination how to Render Result in another PageLaravel 5 Pagination 如何在另一个页面中呈现结果
【发布时间】:2015-06-16 09:05:16
【问题描述】:

嗨,我做了一个 Laravel 项目,我可以通过排序查看一些记录。例如,我有一个带有 URL 的交货页面

http://localhost/dboard/public/deliverytracker

在该表单中,有 From Date 和 To Date 用于在查询之前对数据进行排序。 当我单击提交时,数据被呈现并且分页链接在那里。但是,当单击时,例如分页的第 2 页是

http://localhost/dboard/public/deliverytracker?page=2

在链接中它不会呈现数据的第 2 页。它只是重新加载了我需要再次选择从日期和到日期然后再次单击提交的页面。我错过了什么吗?

这是我的路线

/* Delivery Tracker */
Route::get('deliverytracker', 'DeliveryTrackerController@deliveryIndex');
Route::post('deliverytracker', 'DeliveryTrackerController@getDeliveries');

我提交表单时的功能

public function getDeliveries()
{
    $rules = array(
        'fromdate'  => 'required',
        'todate'    => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);

    // Check if all fields is filled
    if ($validator->fails()) 
    {
        return Redirect::to('deliverytracker')->withErrors($validator);
    }
    else
    {
        $from   = Input::get('fromdate');
        $to     = Input::get('todate');

        $deliveries = new DeliveryTracking();
        $result = $deliveries->getDeliveries($from, $to);

        // Get the current page from the url if it's not set default to 1
        $page = Input::get('page', 1); 

        // Number of items per page
        $perPage = 5;

        // Start displaying items from this number;
        $offSet = ($page * $perPage) - $perPage; // Start displaying items from this number

        // Get only the items you need using array_slice (only get 10 items since that's what you need)
        $itemsForCurrentPage = array_slice($result, $offSet, $perPage, true);

        // Return the paginator with only 10 items but with the count of all items and set the it on the correct page
        $result =  new LengthAwarePaginator($itemsForCurrentPage, count($result), $perPage, $page);
        $result->setPath('deliverytracker');

        return view('deliverytracker.index')->with(array('result' => $result));

    }

}

我的看法

<div class="panel-body">
                @if(isset($result))
                    <table class="table table-striped table-bordered">
                    <thead>
                        <tr>
                            <td>Delivery Status</td>
                            <td>Ref. Number</td>
                            <td>PO #</td>
                            <td>Count</td>
                            <td>Delivery QTY</td>
                            <td>Date Delivered</td>
                            <td>Filename</td>
                            <td>Invoice #</td>
                            <td>Date Invoice</td>

                        </tr>
                    </thead>
                    <tbody>
                    @foreach($result as $key => $value)
                        @if($value->stat == "Completed")
                            <tr>
                                <td class="bg-success">{{ $value->stat  }}</td>
                                <td class="bg-success">{{ $value->oc }}</td>
                                <td class="bg-success">{{ $value->pon }}</td>
                                <td class="bg-success">{{ $value->cnt }}</td>
                                <td class="bg-success">{{ $value->dq }}</td>
                                <td class="bg-success">{{ $value->dd }}</td>
                                <td class="bg-success">{{ $value->fn }}</td>
                                <td class="bg-success">{{ $value->inum }}</td>
                                <td class="bg-success">{{ $value->di }}</td>
                            </tr>
                        @elseif($value->stat == "Active")
                            <tr>
                                <td class="bg-danger">{{ $value->stat  }}</td>
                                <td class="bg-danger">{{ $value->oc }}</td>
                                <td class="bg-danger">{{ $value->pon }}</td>
                                <td class="bg-danger">{{ $value->cnt }}</td>
                                <td class="bg-danger">{{ $value->dq }}</td>
                                <td class="bg-danger">{{ $value->dd }}</td>
                                <td class="bg-danger">{{ $value->fn }}</td>
                                <td class="bg-danger">{{ $value->inum }}</td>
                                <td class="bg-danger">{{ $value->di }}</td>
                            </tr>   
                        @endif

                    @endforeach
                    </tbody>
                     </table>
                        {!! $result->render() !!}
                @else 
                    No records found.    

                @endif
 </div>

【问题讨论】:

  • 你在哪里设置你的fromdate和todate;因为您将它们设为必需并且它们没有添加到其他页面的 URL,所以您会被重定向:请参阅 Appending To Pagination Links

标签: php laravel pagination laravel-5


【解决方案1】:

在您的帖子中,您提到仅使用?page=N 调用第二页,看到您的路线同时使用GETPOST 定义,您将在单击下一页时点击GET 的路线定义链接。

页面按钮只是链接而不是 POST 表单。所以不是点击getDeliveries(),而是点击deliveryIndex()

您也可以考虑将 fromdate 和 todate 附加到您的分页链接;见Appending To Pagination Links

【讨论】:

  • 是的,我正在尝试您的建议,我认为它是附加 fromdate 和 todate。但是怎么做?我的 fromdate 和 todate 与我呈现分页结果的形式相同 deliverytracker.index
  • 我试过这个,{!! $result->appends(['fromdate' => '2012-06-01', 'todate' => '2015-06-16'])->render() !!} 这是正确的格式吗?我会硬编码 fromdate 和 todate 一段时间,然后当没问题时,我会从控制器传递它。
  • 你的路由到达了与 post 不同的路由;这也是你必须检查的事情。我看不到deliveryIndex() 的作用,所以无法为您提供帮助
  • deliveryIndex() 只返回 view('deliverytracker.index');所以我需要为分页链接创建另一个路由和控制器?
  • get 请求也应该指向getDeliveries() 方法,否则?page=N&amp;todate=N&amp;fromdate=N 的请求不会命中分页器类。
【解决方案2】:

表单字段(fromdate, todate) 不会自动附加到分页。您需要使用 ->append() 方法将查询字符串值添加到分页器。

// Return the paginator with only 10 items but with the count of all items and set the it on the correct page
$result =  new LengthAwarePaginator($itemsForCurrentPage, count($result), $perPage, $page);
$result->setPath('deliverytracker');
$result->appends(['fromdate' => $from, 'todate' => $todate]);

参考: http://laravel.com/api/5.0/Illuminate/Contracts/Pagination/Paginator.html#method_appends

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2011-09-20
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2016-05-18
    • 2022-07-05
    相关资源
    最近更新 更多