Laravel 7.x路由分页友好的URL.

问题描述 投票:0回答:2

大家好,最近我在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' => 'MainController@get_search', 'as' => 'search']);

查看

@foreach($data as $item)

        {{ $item->title }}

@endforeach

       {{ $data->links() }}

所以我得到的网址是 /search?key=keyword&page=2

我想做的就是让它看起来像 /search/keyword/page/2/

谢谢大家!

laravel pagination routes friendly-url laravel-7
2个回答
0
投票

我建议你修改 路由网.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]);
...
}

0
投票

好吧,我做了什么,你上面说的,当获得 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
)

显示相同的结果,而我替换的网址。hxxp://xxxx.xxx/search/keyword/page/2/

任何URL输出的结果都是一样的,只是改变了?page=x,但结果是一样的,基本上是用了 hxxp://xxxx.xxx/search/keyword/page/2 没有任何作用。

  • 只有当我把网址改为 hxxp://xxxx.xxx/search/keyword/page/2/page=2 我不需要...

0
投票

替换 ->paginate(20)

->paginate(20, ['*'], 'page', $page)

它没有记录在案。

© www.soinside.com 2019 - 2024. All rights reserved.