Для создания нумерации страниц и бесконечной прокрутки в приложении на Laravel с использованием Vue.js, вы можете следовать следующим шагам. Этот пример будет включать в себя базовую настройку Laravel для работы с API и Vue.js для клиентской части.

Шаг 1: Настройка Laravel

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

php artisan make:model Post -m

Это создаст модель Post и миграцию для нее. Настройте миграцию в database/migrations для определения структуры таблицы.

Создание контроллера: Создайте контроллер для обработки запросов к API.

php artisan make:controller PostController --api

В PostController реализуйте метод для получения постов с пагинацией.

public function index(Request $request)
{
    $posts = Post::query()->paginate(10);
    return response()->json($posts);
}

Настройка маршрутизации: В routes/api.php добавьте маршрут для получения постов.

Route::get('/posts', [PostController::class, 'index']);

Шаг 2: Настройка Vue.js

Установка Vue.js: Если у вас еще нет проекта Vue.js, создайте его с помощью Vue CLI.

vue create my-project

Создание компонента для отображения постов: Создайте компонент Vue, который будет отвечать за отображение постов и реализацию бесконечной прокрутки.

<template>
  <div>
    <div v-for="post in posts" :key="post.id">
      <!-- Отображение информации о посте -->
    </div>
    <div v-if="loading">Загрузка...</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      posts: [],
      page: 1,
      loading: false
    };
  },
  methods: {
    async fetchPosts() {
      this.loading = true;
      const response = await fetch(`/api/posts?page=${this.page}`);
      const data = await response.json();
      this.posts.push(...data.data);
      this.loading = false;
    }
  },
  mounted() {
    this.fetchPosts();
  }
};
</script>

Реализация бесконечной прокрутки: Добавьте обработчик события прокрутки для загрузки следующей страницы постов, когда пользователь достигает конца страницы.

<script>
export default {
  // ...
  methods: {
    // ...
    handleScroll() {
      const { scrollTop, clientHeight, scrollHeight } = document.documentElement;
      if (scrollTop + clientHeight >= scrollHeight) {
        this.page++;
        this.fetchPosts();
      }
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll);
    this.fetchPosts();
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll);
  }
};
</script>

Этот пример демонстрирует базовую реализацию нумерации страниц и бесконечной прокрутки в приложении на Laravel с использованием Vue.js. В зависимости от ваших требований, вам может потребоваться дополнительная настройка и оптимизация.