Я хочу создать веб-приложение с Laravel Lumen и VueJS, где Laravel Lumen используется для API и VueJS для SPA. В приложении я хочу раздел администратора, небольшой форум и сайт. Я хочу использовать эту концепцию в будущих проектах, где я могу легко решить, хочу ли я создать форум или раздел администратора на веб-сайте, или возможность легко расширяться, например, добавляя магазин.
Моя концептуальная идея структуры
Моя идея состояла в том, чтобы создать три отдельных vue экземпляра различных разделов внутри проекта Lumen. Пример структуры каталогов будет выглядеть следующим образом:
(lumen project)
├── app
├── node_modules
├── public
├── resources
│ ├── js
│ │ ├── admin
│ │ │ ├── components
│ │ │ ├── router
│ │ │ ├── store
│ │ │ ├── views
│ │ │ └── admin.js // where I create a vue instance
│ │ ├── forum
│ │ │ ├── components
│ │ │ ├── router
│ │ │ ├── store
│ │ │ ├── views
│ │ │ └── forum.js // where I create a vue instance
│ │ └── site
│ │ ├── components
│ │ ├── router
│ │ ├── store
│ │ ├── views
│ │ └── site.js // where I create a vue instance
│ ├── sass
│ │ ├── admin
│ │ ├── forum
│ │ └── site
│ └── views
├── routes
├── package.json
├── webpack.mix.js
...
С Laravel -миксами файлы js / vue и sass будут для каждого скомпилированы в три отдельных файла в publi c папка:
const mix = require('laravel-mix');
require('laravel-mix-alias');
mix.js('resources/js/site/site.js', 'public/js')
.js('resources/js/admin/admin.js', 'public/js')
.js('resources/js/forum/forum.js', 'public/js')
.sass('resources/sass/site/site.scss', 'public/css')
.sass('resources/sass/admin/admin.scss', 'public/css')
.sass('resources/sass/forum/forum.scss', 'public/css')
.setPublicPath('public');
mix.alias({
'@': '/resources/js/site',
'@admin': '/resources/js/admin',
'@forum': '/resources/js/forum',
'~': '/resources/sass/site',
'~admin': '/resources/sass/admin',
'~forum': '/resources/sass/forum'
});
Затем в (laravel) маршрутах и контроллерах Lumen будет определено, какой js, администратор, сайт или форум, должен быть включен в Lumen View. Таким образом, у каждого раздела есть свой Lumen View, например admin.blade.php
, site.blade.php
и forum.blade.php
. С этого момента вид будет сгенерирован внутри Vue, и Lumen будет использоваться как API.
Мой вопрос
Интересно, ухожу ли я в правильном направлении, прежде чем я go продолжу это хорошая практика? Что может быть лучше или что должно быть совершенно другим? Я думаю, что другой вариант - полностью отделить все и создать отдельные репозитории вместо одного, но я хочу, чтобы все было как один продукт. Я ищу ответ, который объясняет, как лучше всего подходить для моей ситуации.