当前位置: 首页 > 知识库问答 >
问题:

Laravel 5:LengthAwarePaginator中出现错误异常。php:被零除

葛和志
2023-03-14

我有一个带有per_page输入字段的评论列表,允许用户通过ajax在页面上显示更多的评论。默认情况下,它设置为50

但是当我试图改变它时,比如说25,我在开发人员的控制台上得到了这个错误

POSThttp://localhost/r2/public/posts/per_page500(内部服务器错误)

Network选项卡中,我可以看到这个错误

LengthAwarePaginator中出现错误异常。php第48行:

除零

在兰斯瓦雷帕吉纳托。php第48行

在处理例外-

在LengthAwarePaginator-

在评论控件-

在评论控件-

在评论控件-

在评论控件-

在我改变它的路线将其与posts页面集成之前,它工作得很好。

我的路线

Route::get('{post}/comment', ['as' => 'comment', 'uses' => 'CommentController@index']);
Route::post('{post}/post_this_comment', 'CommentController@post_this_comment');
Route::get('{post}/recaptcha', 'CommentController@recaptcha');
Route::get('{post}/reply_comment', 'CommentController@reply_comment');

// this is the per_page route
Route::post('{post}/per_page', ['as' => 'per_page', 'uses' => 'CommentController@per_page']);

Route::post('{post}/comment/update', ['as' => 'comment/update', 'uses' => 'CommentController@update']);

这是CommentController

private function paginate($items, $perPage, Request $request) {
    $page = Input::get('page', 1); // get current page or default to 1
    $offset = ($page * $perPage) - $perPage;
    return new LengthAwarePaginator(
        array_slice($items, $offset, $perPage, false),
        count($items),
        $perPage,
        $page,
        ['path' => $request->url(), 'query' => $request->query()]);
}

protected function comment_list($per_page, Request $request, Post $post) {
    $root_comments = Comment::root_comments($post->id);
    $root_with_replies = $this->include_replies_for($root_comments);
    $paginated_comments = $this->paginate($root_with_replies, $per_page, $request, $post);
    return $paginated_comments;
}

protected function show_comment_list(Request $request, Post $post) {
    $per_page = Input::get('per_page');
    session(['per_page' => $per_page]);
    $comment_list = view('eastgate.comment.comment_list')
                        ->with('comments', $this->comment_list($per_page, $request, $post))
                        ->with('total_comments', $this->total_comments())
                        ->with('per_page', $per_page)
                        ->render();
    return $comment_list;       
}

public function per_page(Request $request, Post $post){
    $response = array(
        'status' => 'success',
        'msg'   => 'reply comment',
        'comment_list' => $this->show_comment_list($request, $post)
    );
    return Response::json($response);       
}

这是JS和HTML

$(document).on('change', 'input.comments_per_page', function(){
    var formData = new FormData();
    formData.append('per_page', $('.comments_per_page').val());
    var request = $.ajax({ // push question data to server
        type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
        url         : 'per_page', // the url where we want to POST
        data        : formData, 
        dataType    : 'json',
        processData : false,
        contentType : false
    });
    request.done(per_page_done_handler);
    request.fail(per_page_fail_handler); // fail promise callback   
});

<div class="col-xs-12">
    Show <input type="text" name="comments_per_page" class="comments_per_page" value="{!! $per_page !!}" size="2" title="Number of comments per page"> comments per page
</div>

更新

我应该提到,我也可以看到laravel的默认分页div,当我点击第二个页面,其中有http://localhost/r2/public/posts/2/?page=2的url页面重定向到http://localhost/posts/2?page=2和我得到这个错误

错误404找不到对象!

但是如果我手动转到这个URLhttp://localhost/r2/public/posts/2?page=2

第二页的评论加载得很好。

更新2

我只是在comment\u list()方法中的$paginated\u comments上设置路径,现在下一页可以正常打开了。但是当我试图更改显示的注释数时,仍然会得到被零除的错误。

$paginated_comments = $this->paginate($root_with_replies, $per_page, $request, $post);
$paginated_comments->setPath('');

共有2个答案

宗安宁
2023-03-14

我认为你的问题在于你没有告诉你的路线,每页是一个参数,让我解释一下:

Route::post('{post}/per_page', ['as' => 'per_page', 'uses' => 'CommentController@per_page']);

应该是:{per_page}

Route::post('{post}/{per_page}', ['as' => 'per_page', 'uses' => 'CommentController@per_page']);

我希望这能帮助你。

胡俊弼
2023-03-14

这与页码(50或25)无关。如果您查看\vendor\laravel\framework\src\illumb\Pagination\LengthAwarePaginator。php,您可以看到您的问题行(它抛出异常除以零):

$this->lastPage = (int) ceil($total / $perPage); // <= problem

这意味着只有一件事-$perPage为0或null=

注意:恕我直言,分页应该是一个单一的动作。你都需要信息来制作它,但是,你把它分成四个“部分”。

 类似资料:
  • 我的代码中出现了这个错误。 这是我的代码: 这就是结果。错误:在线程“main”java中输入model:Exception。lang.NullPointerException在汽车上。主(车.java:10)

  • 问题内容: 也许我在PHP手册中某个地方缺少它,但是错误和异常之间的区别到底是什么?我可以看到的唯一区别是错误和异常的处理方式不同。但是什么导致异常,什么导致错误? 问题答案: 引发异常 -旨在捕获异常。错误通常是无法恢复的。例如,让我们说- 您有一段代码将在数据库中插入一行。此调用有可能失败(重复ID)-您将希望遇到一个“错误”,在这种情况下为“异常”。当您插入这些行时,您可以执行以下操作 程序

  • 我在Eclipse中尝试Apache HTTP客户端库 下面的代码片段检查了异常并需要处理。 日蚀给出了3条建议 > Add throws Exception-(工作正常) 用尝试捕捉包围- (也工作正常) 用try/multicatch环绕 第三个选项给出错误 客户端协议异常已经被替代的IO异常捕获 我看到了的源代码,它。据我所知,在捕获多个异常时,我们可以在更具体的异常下捕获更一般的异常。因此

  • 我对Java非常陌生,似乎遇到了一些奇怪的错误。我到处寻找解决方案,我遇到的所有解决方案都与我已有的完全相同。 我已经编写了一个类,将目的地添加到ArrayList,但它不起作用。 我得到了这个错误:“线程中的异常”main“java.lang.NullPointerException” 这是我的代码: 我试图添加到ArrayList的数据的代码是这样的: 它退出方法中的程序,并且不将目标添加到数

  • 我是第一个 org.springframework.jdbc.BadSqlGrammarException:准备状态回调;错误的SQL语法[选择cid,临床医生代码,密码,名字,临床医生的姓氏,其中临床医生代码= ?]; 嵌套异常com.mysql.jdbc.exceptions.jdbc4. MySQLSyntaErrorException:字段列表中的未知列“临床医生” 以下代码出错,您还可以

  • 我是Java公司的JSON新手,并试图使用maven和Eclipse来探索它。 这是我的JSON文件。 我的pom.xml文件如下所示 我试图列出所有的jsonp事件。下面是相同的代码段。 运行上述文件后,我得到以下错误。 谁能帮我找出哪里不对劲。