【问题标题】:Laravel 7.x Route Pagination / Friendly URLLaravel 7.x 路由分页/友好 URL
【发布时间】:2020-08-13 06:57:01
【问题描述】:

大家好,最近我在 Laravel 7.x 上开始了一个项目,但是我遇到了一些问题。

我使用 laravel 默认分页进行了搜索。

这是我的代码:

搜索表单

<form action="/search" method="GET">            
    <input type="text" name="k" id="k" value="" placeholder="Search...">
    <button type="submit">Search</button>
</form>

控制器

public function get_search(Request $request)
    {

        $keyword = request('k');

        $data = DB::table('posts')
                    ->where('title', 'LIKE', '%$keyword%')
                    ->orderBy('id', 'DESC')
                    ->paginate(20);


        return view('search', ['data' => $data]);

路线

Route::get('/search',['uses' =&gt; 'MainController@get_search', 'as' =&gt; 'search']);

查看

@foreach($data as $item)

        {{ $item->title }}

@endforeach

       {{ $data->links() }}

所以我得到像/search?key=keyword&amp;page=2这样的网址

我只想让自己看起来像/search/keyword/page/2/

谢谢!

【问题讨论】:

  • @A.ANoman str_replace 函数在哪里?

标签: laravel pagination routes friendly-url laravel-7


【解决方案1】:

我建议你修改routes/web.php文件。使用路由参数

 Route::get('/search/{keyword}/page/{page}', 'SearchController@index')->name('.search');

然后,在控制器上,

public function index($keyword, $page){ //Receive parameters
   $data = DB::table('posts')
      ->where('title', 'LIKE', '%$keyword%')
      ->orderBy('id', 'DESC')
      ->paginate(20);
   return view('search', ['data' => $data]);
...
}

【讨论】:

  • 路由有效,但页面没有改变。默认情况下,它只占用第 1 页。结果只是来自第 1 页的结果,并且分页在 1 上保持活动状态。所以基本上它不会占用页面。
  • 必须修改表单操作。你做到了?还要确保在将参数传递给视图时添加 collect(['data' => $data]) 方法
  • 不,我没有。我的表单是
    add collect(['data' => $data]) 好没有添加到视图中? @foreach($data as $item) {{ $item->title }} @endforeach {{ $data->links() }}
  • 可能是我的问题,它正在查看 atm。我得到了链接分页,如 /search/keyword/page/2?page=2 ... 等
  • 表单只是发送数据。在您的情况下,使用使用 URL 参数 (?keyword="x") 的 GET 方法。要将它们重定向到“/page/.../”格式,需要像我一样编辑它们
【解决方案2】:

好的,我做了你上面所说的,当在搜索刀片上获得 print_r($data) 时,我得到了这个

Array
(
    [current_page] => 1
    [data] => Array
        (
            [0] => stdClass Object
                (
                    [title] => keyword 1
                )

            [1] => stdClass Object
                (
                    [title] => keyword 2
                )

            [2] => stdClass Object
                (
                    [title] => keyword 3
                )

            [3] => stdClass Object
                (
                    [title] => keyword 4
                )

            [4] => stdClass Object
                (
                    [title] => keyword 5
                )

            [5] => stdClass Object
                (
                    [title] => keyword 6
                )

            [6] => stdClass Object
                (
                    [title] => keyword 7
                )

            [7] => stdClass Object
                (
                    [title] => keyword 8
                )

            [8] => stdClass Object
                (
                    [title] => keyword 9
                )

            [9] => stdClass Object
                (
                    [title] => keyword 10
                )

        )

    [first_page_url] => hxxp://xxxx.xxx/search/keyword?page=1
    [from] => 1
    [last_page] => 5
    [last_page_url] => hxxp://xxxx.xxx/search/keyword?page=5
    [next_page_url] => hxxp://xxxx.xxx/search/keyword?page=2
    [path] => hxxp://xxxx.xxx/search/keyword
    [per_page] => 10
    [prev_page_url] => 
    [to] => 10
    [total] => 49
)

在我替换 url hxxp://xxxx.xxx/search/keyword/page/2/ 时显示相同的结果

任何 URL 都输出相同的结果,只是更改了 ?page=x,但结果是相同的。基本上 hxxp://xxxx.xxx/search/keyword/page/2/ 什么都不做。

  • 只有当我将 url 更改为 hxxp://xxxx.xxx/search/keyword/page/2/?page=2 而我不需要这样做时,结果才会改变..

【讨论】:

    【解决方案3】:

    替换-&gt;paginate(20)

    -&gt;paginate(20, ['*'], 'page', $page)

    没有记录。

    【讨论】:

      猜你喜欢
      • 2012-10-06
      • 1970-01-01
      • 2011-12-24
      • 2011-04-06
      • 2013-09-03
      • 1970-01-01
      • 2011-03-05
      • 2021-01-30
      • 2020-12-04
      相关资源
      最近更新 更多