【问题标题】:Laravel pagination how appends long stringLaravel分页如何附加长字符串
【发布时间】:2017-06-14 18:45:15
【问题描述】:

我刚开始学习 laravel。出现问题,我从 5000 条分页记录的数据库中进行选择。

我的数据看起来像这样 380673113513 380673113514 380673113515 380673113516 ... 还有几千个

我把它们分成一个数组

$numberList = explode("\r\n", $request['inputList']);

我用分页进行选择

$objects = Number::has('object')->with('object')->whereIn('number', $numberList)->Paginate(1000);

为了工作分页,我重新传输表单的数据

{{ $objects->appends(['inputList' => $_REQUEST['inputList']])->links() }}

因此我有这样的链接 http://telbase.dev/list?inputList=380673113513%0D%0A380673113514%0D%0A380673113515%0D%0A380673113516%0D%0A380673113517%0D%0A380673113518%0D%0A380673113519%0D%0A380673113520%0D%0A380673113521%0D%0A380673113522%0D%0A380673113523%0D%0A380673113524%0D%0A380673113525%0D%0A380673113526%0D%0A380673113527%0D%0A380673113528%0D%0A380673113529%0D%0A380673113530%0D%0.................&page=2

如果数据很多,字符串很长,服务器返回错误414 Request URI Too Large。我认为我最初做错了什么。如何在分页中正确传递这么大的请求。

ps对不起我的英语,我用谷歌翻译)

【问题讨论】:

  • 为什么要在url中传输数据?我无法真正理解您要做什么,但是对于分页,您只需要 PAGE 参数

标签: laravel pagination


【解决方案1】:

web.php:

Route::post('/'data, '<controllername>@<functionname>');

控制器:

public function <functionname>(){
    //logic to create data
    $data = response()->json([
        'data' => $data
    ])
    return View::make('<view_name>', array('data' => $data));
}

那么你应该可以在你的视图中访问它:

{{$data[0]-><attribute>}}

或者做一个 foreach 语句...

【讨论】:

【解决方案2】:

您是否使用 POST 方法?如果不是,您应该这样做,因为获取请求的长度在发布到服务器配置的位置是有限的。

【讨论】:

  • 我使用 post 从 textarea 获取数据。但据我了解,要进行分页,我需要将它们重新传输到 url
  • 我认为您会使用数据进行查看。比如 return Route::post('/'data, '@')
【解决方案3】:

web.php

    Route::get('/test', [
    'uses' => 'TestController@test',
    'as'=> 'test'
]);

Route::post('/test', [
    'uses' => 'TestController@test',
    'as'=> 'test'
]);

控制器

public function test(Request $request)
{
        $numberList = explode("\r\n", $request['inputList']);
        $objects = Number::has('object')->with('object')->whereIn('number', $numberList)->Paginate(10);
        return view('objects.test')->with('objects', $objects);
}

查看

<form class="form-horizontal" action="{{ route('test') }}" method="POST">
   <textarea class="form-control" name="inputList" id="inputList"></textarea>
   <button type="submit" class="btn btn-default">go</button>
   <input type="text" name="_token" value="{{ csrf_token() }}" hidden>
</form>

        @if ($objects->count() > 0)
            @foreach( $objects as $object)
                <tr>
                    <td>{{ $object->number }}</td>
                    <td>{{ $object->object->fio }}</td>
                </tr>
            @endforeach
            {{ $objects->links() }}
        @endif

当我在表单中提出请求时,结果正常显示。 但是当我尝试转到第 2 页时,我得到一个带有表单的空白页面。 这一切都是因为当您转到第 2 页时,$ request ['inputList'] 已经为空,因此 $ objects 也为空。 这是为什么呢?

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2023-03-13
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多