Laravel 7.x Маршрутная нумерация страниц / Дружественный URL - PullRequest
0 голосов
/ 29 апреля 2020

Привет всем, недавно я запустил проект на 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() }}

Так что я получаю URL как /search?key=keyword&page=2

Все, что я хочу, это сделать так, чтобы /search/keyword/page/2/

Спасибо!

Ответы [ 3 ]

0 голосов
/ 29 апреля 2020

Хорошо, я сделал то, что вы сказали выше, и при получении 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 , что мне не нужно ..
0 голосов
/ 06 мая 2020

Заменить ->paginate(20)

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

Это не задокументировано.

0 голосов
/ 29 апреля 2020

Я предлагаю вам изменить файл route / 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]);
...
}
...