Я использую Laravel Jetstream и InertiaJS. Попробовал сделать пагинацию по мануалу.
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');
<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.
{
"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"
}
}






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, вы действительно перезагружаете страницу с новым GET-параметром page или просто добавляете его без обновления?
спасибо за попытку помочь. Я нашел, в чем была ошибка
Я указал в файле nginx.conf вот так
location / {
try_files $uri /index.php;
}а надо было так
location / {
try_files $uri /index.php?$query_string;
}
Я пробовал, но это не помогло