Страница не меняется при использовании paginator (Laravel, Inertia.js)

Я использую Laravel Jetstream и InertiaJS. Попробовал сделать пагинацию по мануалу.

веб.php

use App\Models\Post;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;

Route::get('/posts', function () {
    return Inertia::render('Posts', [
        'posts' => Post::paginate(2)->through(fn($post) => [
            'id' => $post->id,
            'title' => $post->title,
            'body' => $post->body
        ])
    ]);
})->name('pages.posts');

Posts.vue

<script setup>
import { Link } from '@inertiajs/inertia-vue3';
import NewLayout from '@/Layouts/NewLayout.vue';
defineProps({posts: Object});
</script>

<template>
    <NewLayout title = "posts">
        <div>
            <div class = "m-10 border w-400" v-for = "post in posts.data" :key = "post.id">
                <div>{{ post.title }}</div>
                <div>{{ post.body }}</div>
            </div>
        </div>
        <div class = "inline-flex -space-x-px">
            <a class = "bg-white border border-gray-300 text-gray-500 hover:bg-gray-100 hover:text-gray-700 ml-0 rounded-l-lg leading-tight py-2 px-3 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white" 
            v-for = "link in posts.links" :href = "link.url" v-html = "link.label"></a>
        </div>
    </NewLayout>
</template>
'posts' => Post::paginate(4)

когда я изменяю значение нумерации страниц на 4 в файле web.php, он показывает 4 сообщения

'posts' => Post::paginate(2)

а когда ввожу значение 2, то выводит первые два поста (и пока все работает как надо)

но когда я нажимаю на вторую страницу, ничего не меняется. отображаются одни и те же первые два поста

Я не знаю, что я сделал не так. пожалуйста помоги.

Я использую laravel 9, docker, nginx, mysql.

пакет.json

{
    "private": true,
    "scripts": {
        "dev": "vite",
        "build": "vite build"
    },
    "devDependencies": {
        "@inertiajs/inertia": "^0.11.0",
        "@inertiajs/inertia-vue3": "^0.6.0",
        "@inertiajs/progress": "^0.2.7",
        "@tailwindcss/forms": "^0.5.2",
        "@tailwindcss/typography": "^0.5.2",
        "@vitejs/plugin-vue": "^4.0.0",
        "autoprefixer": "^10.4.7",
        "axios": "^1.1.2",
        "laravel-vite-plugin": "^0.7.2",
        "lodash": "^4.17.19",
        "postcss": "^8.4.14",
        "tailwindcss": "^3.1.0",
        "vite": "^4.0.0",
        "vue": "^3.2.31"
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Laravel paginator берет GET параметр page из объекта запроса. Вы не предоставляете этот объект для работы, поэтому он не работает. Попробуй это

Route::get('/posts', function (Request $request) {...})->name('pages.posts');

Или вы можете указать страницу вручную:

Route::get('/posts', function (Request $request) {
    return Inertia::render('Posts', [
        'posts' => Post::paginate(2, page: $request->page ?? 1)->through(fn($post) => [
            'id' => $post->id,
            'title' => $post->title,
            'body' => $post->body
        ])
    ]);
})->name('pages.posts');

Я пробовал, но это не помогло

bobus 22.01.2023 21:58

@bobus, вы действительно перезагружаете страницу с новым GET-параметром page или просто добавляете его без обновления?

Lothric 23.01.2023 09:32

спасибо за попытку помочь. Я нашел, в чем была ошибка

bobus 23.01.2023 16:13
Ответ принят как подходящий

Я указал в файле nginx.conf вот так

location / {
    try_files $uri /index.php;
  }

а надо было так

location / {
    try_files $uri /index.php?$query_string;
  }

Другие вопросы по теме