laravel 5中的分页产生错误的链接

时间:2015-04-23 21:54:06

标签: laravel laravel-5

在用户页面上创建分页时,分页链接不正确,它们在/ = page = 1之前,因此链接重定向到root,找不到404。

控制器方法:

public function getRegister()
{
    $users = User::where("admin", 0)->paginate(3);

    return view('auth.register', compact('users'));
} 

视图

<?php echo $users->render(); ?>

用户页面网址:http://localhost:8080/pal/public/agent/create

分页链接:http://localhost:8080/pal/public/agent/create/?page=1

点击分页链接时,浏览器会将我重定向到:http://localhost:8080/agent/create?page=3并获得404页面未找到

4 个答案:

答案 0 :(得分:20)

不幸的是,至少就目前而言,Laravel 5是如何运作的。

要删除那个额外的斜杠,你必须在渲染之前手动处理分页链接。

你可以: 1)在你的控制器中,在paginator实例上调用setPath(),如下所示:

public function getRegister()
{
    $users = User::where('admin',0)->paginate(3);
    $users->setPath('your/custom/path');
    return view('your/view')->with('users',$users);
}

接下来在您的视图中,只需调用render(),它应该按预期工作。

或2)在控制器中修改任何内容但在视图中更改链接格式,例如:

{!! str_replace('/?', '?', $users->render()) !!}

您可以参考我之前提出的question

希望这有帮助!

我仍然在寻找更优雅的解决方案,但还没有找到:(

于2016-05-30更新

感谢所有的选票。请注意,在Laravel 5.2中,您不必再以上述方式破解代码了!在视图中调用render()就是您需要做的。那很好,不是吗?

答案 1 :(得分:3)

我喜欢卡特的回答,我更喜欢第一个使用setPath的建议。设置&#34; setPath&#34;一个空字符串为我工作。 :)

$users->setPath('');

答案 2 :(得分:0)

这里最好的方法(无需更改代码)是将.htacces文件修改为:

RewriteEngine On
RewriteBase /pal/public/

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301] <-- removed "/" before $1

这种方式(没有此代码段中的注释)应该正确呈现分页链接。

答案 3 :(得分:0)

添加卡特建议:

    public function getRegister()
    {
       $users = User::where('admin',0)->paginate(3);
       $users->setPath('your/custom/path');
       return view('your/view')->with('users',$users);
    }

添加'url()'并将其与路径连接起来。例如'/ admin / user / list'

    $users->setPath(url() . '<route>');