Как реализовать Laravel-проект, с поддержкой нескольких Vue-компонентов?

Есть Laravel-проект, который представляет собой простой статичный сайт с выводом постов. Для данного проекта используется обычная авторизация. Сейчас мне необходимо реализовать уведомления пользователей (Vue-компонент), отправку и показ комментариев к посту (Vue-компонент), личный кабинет для определенной группы (Vue-компонент). Все остальное у меня является статикой.

Вопрос заключается в следующем: как в таких случаях связываются vue и laravel? По стандарту создается один Vue-объейкт, в который подключаются все компоненты, vuex и тд. Но в таком случае мне придется все это маунтить к единому контейнеру #app, в котором по идее должен будет находиться ВЕСЬ сайт. то есть в таком случае надо уже все реализовывать на VUE, но такой задачи не стоит.

Я бы хотел просто на с транице поста выводить Vue-компонент для комментариев (собственно это будет один объект Vue), для уведомлений пользователя другой Vue-компонент, и тд. Но в таком случае будет получаться мишура из создания нескольких объектов:
var comments = new Vue({
  el: '#comments',
  data: {
    message: 'Hello Vue!'
  }
})

var notifications = new Vue({
  el: '#notifications,
  data: {
    message: 'Hello Vue!'
  }
})


Так же не понятно как правильно должны данные компоненты работать с авторизацией, так как они должны быть доступны только для авторизованных пользователей, плюс возможны различные условия связанные с ролью пользователя. Просто реализовывать в компоненте jwt?
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 2
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
Дмитрий выше все правильно написал. И да, все уже сделано за нас: https://github.com/laravel/ui
Т.е. вы действительно делаете #app в layout'е и Vue обрабатывает все содержимое вашей страницы. Т.о. вы может создавать компоненты и вставлять их в необходимые места.
А про разграничение доступа: кто вам мешает использовать в blade @if и не показывать компоненты тем, кому их видеть не нужно?...
Ответ написан
Я конечно не супер-гуру, но уже который год бьюсь вокруг laravel-vue-nuxt и в связках и по отдельности.
Сейчас как раз переписываю старый проект примерно по такой же системе.

Мне представляется, что можно обойтись одним div#app в основном layout
<body class="antialiased">
       <div id="app">
      @yield('content')
</div>
        @stack('scripts')
    </body>
, от которого уже наследовать страницы сайта. Просто регистрируете разные компоненты в app.js

const app = new Vue({
        el: '#app',
        router,
        store,
        components: { Homepage}, //здесь все ваши компоненты
    });

И уже просто в блейдах их вставляете где необходимо. По идее встроенной laravel авторизации будет достаточно, поскольку роутинг будет laravel. Намучался с vue/nuxt авторизациями - слишком много нового за последний год sanctum, fortify - черт ногу сломит.
Я поставил чистую лару с упрощенной авторизацией breeze.

Опять же повторю ни разу не гуру и могу ошибаться
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы