Нумерация страниц из запроса AJAX не работает должным образом - Laravel 5.6 - PullRequest
0 голосов
/ 08 сентября 2018

Я использую Laravel 5.6 - Jquery Ajax

Вот в чем суть

У меня есть поисковый ввод, размещенный на моей панели навигации, на нем есть список событий ('keyup').

Каждый раз, когда запускается keyup, AJAX GET-запрос отправляется на

url : '{{action('PostController@searchAdmin')}}'

Из web.php: Route::get('/search/admin', 'PostController@searchAdmin');

Я сделал возврат этого действия частичным с данными

return view('back.partials.searchResult', ['posts' => $posts, 'trashed' => $trashed]);

И я заменяю содержимое основного тега этим частичным

Все работает правильно, за исключением случаев, когда счетчик результатов больше 10 (точка разбиения на страницы).

Все ссылки управления пагинацией указывают на "search / admin? Page = x", и когда я нажимаю на нее, эта ошибка показывает

Undefined variable: posts

Я использовал $posts->links(), чтобы показать элементы управления

1 Ответ

0 голосов
/ 11 сентября 2018

Я нашел решение, поэтому выкладываю его

В web.php

Route::get('/search', function(Request $request) {
    $search = $request->search;
    $trashed = Post::trash()->count();
    $posts = Post::notTrash()
        ->where('title', 'like', '%' . $search . "%")
        ->orWhere('post_type' , 'like', '%' . $search . '%')
        ->paginate(10);


    $posts->withPath('?search=' . $search);
    return view('back.partials.searchResult', ['posts' => $posts, 'trashed' => $trashed, 'search' => $search]);
});

Этот код предназначен для тестирования и будет вскоре экспортирован в новый контроллер под названием SearchController

В моем постконтроллере

public function index(Request $request)
{

    // GET parameters
    $paginate = $request->input('paginate') ?? 10;
    $search = $request->input('search') ?? null;

    if($search !== null) {
        $posts = $this->checkCategories($paginate, $search);
    } else {
        $posts = Post::notTrash()->orderBy('id', 'ASC')->paginate($paginate);
    }
    $trashed = Post::trash()->count();
    $posts->withPath('?search=' . $search);

    return view('back.index', ['posts' => $posts, 'trashed' => $trashed, 'search' => $search]);
}

Работа с

private function checkCategories($paginate, $search)
{
    $categories = Category::all();
    foreach ($categories as $category) {

        if(strpos(strtolower($category->name), $search) === false) {
// @TODO: Change for stripos 
            $posts = Post::notTrash()
                ->where('title', 'like', '%' . $search . '%')
                ->orWhere('post_type', 'like', '%' . $search . '%')
                ->paginate($paginate);
        } else {
            return Category::find($category->id)->posts()->paginate($paginate);
        }
    }

    return $posts;

}

Метод index теперь принимает Request для обработки параметров get, когда они есть.

На мой взгляд

   @if($search !== null)
        {{ $posts->appends($search)->links() }}
    @else
        {{ $posts->links() }}
    @endif

Теперь замените

{{ $posts->links() }}

Решением было $ var -> withPath () и обработка GET-параметров

...