Отображение страниц для результатов поиска laravel 5.3

Результаты поиска подкачки

Я только что начал с Laravel, и я пытаюсь выполнить функцию поиска с правильной разбиением на страницы. Функция работает для первой страницы, а на второй странице - нет. Я думаю, что это не дает результаты на следующей странице, но я не могу найти ответ.


это моя функция поиска внутри IndexController:

public function search()
{
    $q = Input::get('search');

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}

это мой маршрут:

Route::post('search{page?}', '[email protected]');

это URL-адрес второй страницы:

/search?page=2

вот как я показываю свою разбивку на страницы:

{{ $product->appends(Request::get('page'))->links()}}

ошибка:

MethodNotAllowedHttpException in RouteCollection.php line 218:

Получить ошибку по запросу.

Маршрут:

Route::get('search/{page?}', '[email protected]');

Ошибка:

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 780
at Router->findRoute(object(Request)) in Router.php line 610
at Router->dispatchToRoute(object(Request)) in Router.php line 596
at Router->dispatch(object(Request)) in Kernel.php line 267
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53

Надеюсь, мой вопрос ясен и в правильном формате. Спасибо заранее (извините за мой плохой английский)


Ответ:

В итоге я использовал ответ этого сообщения в сочетании с некоторой помощью this post

Я использовал функцию post для начального поиска и функцию get для следующих страниц. Это было возможно, потому что теперь я просматриваю URL-адрес.


EDIT:

  • добавлена ​​начальная ошибка.
  • добавлена ​​ошибка Route::get
  • добавлен ответ

Ответ 1

Если вы хотите применить фильтры к следующей странице, вы должны добавить их в свой paginator следующим образом:

$product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);
$product->appends(['search' => $q]);

И измените свой маршрут с поста, чтобы получить:

Route::get('search', '[email protected]');

Ответ 2

Route::get('product', function () {
    $product= App\product::paginate(15);

    $product->setPath('custom/url');

});

Вид:

{{ $product->appends(['search' => Request::get('page')])->links() }}

Ответ 3

Я предполагаю, что вы хотите изменить страницы с такими URL-адресами search/1, search/2? Прежде всего, ваш маршрут должен быть, вероятно, Route::post('search/{page?}').

Я не уверен, что только это изменение будет работать, но если это не так, вам нужно решить эту страницу как

public function search(\Illuminate\Http\Request $request, $page = 1)
{
    $q = $request->get('search');

    \Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
        return $page;
    });

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}

Ответ 4

$searchdata =  \Request::get( 'inputTextFieldname' ); \make as global
$searchresult = Modelname::where ( 'blogpost_title', 'LIKE', '%' .$searchdata . '%' )->paginate(2);
return view( 'search', compact('searchresult') );

и на вашей странице просмотра

{{$searchresult->appends(Request::only('inputTextFieldname'))->links()}}

проложить маршрут, чтобы получить метод

Route::get('/search', ['as' => 'search', 'uses' => '[email protected]']);

это будет сделано, спасибо,

Ответ 5

в моем случае у меня установлен laravel 5.7.

$perPage = $request->per_page ?? 10;

$data['items'] = User::where('name', 'like', '%'. $request->search . '%')
                         ->paginate($perPage)
                         ->appends(['search' => $request->search, 'per_page' => $request->per_page]);

    return view('users.index', $data);

и мои файлы просмотра кодов

для per_page выберите выпадающий список и область поиска

<form role="form" class="form-inline" method="get" action='{{ url('/user') }}'>
 <div class="row">
  <div class="col-sm-6">
   <div class="dataTables_length">
     <label>Show
     <select name="per_page"
       onchange="this.form.submit()"
       class="form-control input-sm">
      <option value=""></option>
      <option value="10" {{ $items->perPage() == 10 ? 'selected' : '' }}>10
      </option>
      <option value="25" {{ $items->perPage() == 25 ? 'selected' : '' }}>25
      </option>
      <option value="50" {{ $items->perPage() == 50 ? 'selected' : '' }}>50
      </option>
     </select>
     entries
     </label>
    </div>
   </div>

<div class="col-sm-6">
 <div class="dataTables_filter pull-right">
  <div class="form-group">
   <label>Search: &nbsp;
   <input type="search" name="search" class="form-control input-sm"
   placeholder="Name" value="{{ request()->search }}">
   </label>
  </div>
 </div>
</div>

и мой код генератора нумерации страниц

{{ $items->appends(['search' => request()->search, 'per_page' => request()->per_page])->links() }}

Ответ 6

Если вы используете форму поиска с методом GET, используйте что-то подобное для сохранения нумерации страниц в результатах поиска.

 public function filter(Request $request)
    {        
        $filter = $request->only('name_operator','name_value','email_operator','email_value', 'phone_operator','phone_value',   'gender_value', 'age_operator','age_value');
        $contacts = $this->repo->getFilteredList(array_filter($filter));
        $contacts->appends($filter)->links(); //Continue pagination with results
        return view('dashboard::index', compact('contacts'))->withInput($request->all());
    }

Ответ 7

быстрый способ видения (Lavarel 5.7)

$product->appends(Request::all())->links();

Ответ 8

Для разбивки на страницы вы должны создать простую форму:

<form action="{{URL::to('/search')}}" method="post">
    <input type="hidden" name="query"/>
    <select name="pages">
    @for($p = 1; $p < $products->lastPage(); $p++ )
        <option value="{{ $p }}">{{ $p }}</option>
    @endfor
    </select>
</form>

Здесь используются методы разбивки на страницы:

$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (Not available when using simplePaginate)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (Not available when using simplePaginate)
$results->url($page)

Ответ 9

В вашем файле просмотра, где вы отображаете нумерацию страниц...

{{ $results->appends(Request::except('page'))->links() }}

appends сохраняет значение строки запроса, кроме "page".