Установка Vuetify на Laravel

Установка Vuetify на Laravel

В статье мы рассмотрим как настроить фреймворк Vue и установить набор компонентов Vuetify на Laravel 6.

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

Для тестов устанавливаем свежий Laravel:

composer create-project --prefer-dist laravel/laravel vuetest "6.*"

Он будет доступен по адресу http://vuetest.loc.

Я показываю все на 6-й версии фреймворка Ларавел , т.к. чаще всего в работе использую ее поскольку это версия с длительной поддержкой.

Убедитесь что у вас установлен NodeJS, т.к. мы будем использовать пакетный менеджер NPM.

Устанавливаем Vue

Сначала добавим к нашей установки Ларавел компонент Laravel/UI, сделаем это через композер:

composer require laravel/ui 1.2.*

Ставим версию 1, поскольку версии 2 и 3 не работают с Laravel 6.

Далее выполняем artisan команду:

php artisan ui vue --auth

Она сгенерирует базовые шаблоны.

Тег —auth не обязательный, можно обойтись без него, просто им я добавил систему аутентификации в Ларавел, включая шаблоны и контроллеры. Шаблоны для системы аутентификации будут расположены в папке resources/views/auth, вместе с ней будет создана папка с базовым шаблоном приложения resources/views/layouts основанным на Bootstrap.

Переходим по адресу http://vuetest.loc/login и видим что страница входа создана, но не хватает стилей.

Страница входа создана, но не хватает стилей.

Необходимо установить и собрать фронтенд-зависимости, для этого нужно выполнить две команды:

npm install

npm run dev

Обновляем страницу входа и теперь все должно отображаться правильно.

Vue + Laravel, теперь все должно отображаться правильно.

Проверяем работу Vue в Laravel

Для теста заменим код шаблона resources/views/welcome.blade.php на:

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Привет</div>
                    <div class="card-body">
                         Привет Мир!
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

Дальше попробуем подключить в этот шаблон компонент Vue. После всех манипуляций, которые мы проделали выше, в папке resources/js/components нам доступен пример Vue компонента ExampleComponent.vue

Чтобы его подключить добавим в шаблон welcome.blade.php строку <example-component></example-component> то место, куда нужно подключить компонент, например так:

<div class="card">
    <div class="card-header">Привет</div>
        <div class="card-body">
              Привет Мир!
        </div>
    </div>
</div>
<example-component></example-component>

Теперь если перейдем на главную страницу http://vuetest.loc/, мы увидим подключенный компонент.

Проверяем работу Vue в Laravel

Если попробовать изменить компонент, например поменять текст на Привет Vue! И обновить главную страницу страницу, ничего не произойдет. Чтобы видеть изменение, необходимо пересобрать фронтенд.

Выполним команду:

npm run watch

Она пересоберет наш фронтенд и продолжит выполняться в терминале. Она будет следить за всеми изменениями наших ресурсов и при любых изменениях будет автоматически обновлять файлы.

Теперь обновив главную страницу мы видим измененный компонент Vue с нашим текстом.

Проверяем работу Vue в Laravel

Установка Vuetify

Осталось добавить Vuetify к нашему проект, мы будем подсказками из раздела установки официальной документации https://vuetifyjs.com/en/getting-started/installation/

Итак установим vuetify командой:

npm install vuetify

Далее в папке resources/js создадим папку plugins, а в ней файл vuetify.js следующего содержания:

import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'

Vue.use(Vuetify)

const opts = {}

export default new Vuetify(opts)

Далее необходимо изменить файл resources/js/app.js:

require('./bootstrap');

window.Vue = require('vue');

import Vuetify from './plugins/vuetify'

Vue.component('example-component', require('./components/ExampleComponent.vue').default);

const app = new Vue({
    vuetify: Vuetify,
    el: '#app',
});

В папку с компонентами Vue resources/js/components для того чтобы протестировать Vuetify добавим еще один компонент, назовем его TestComponent.vue.

В шаблон компонента добавим, например, элемент Alert из набора Vuetify https://vuetifyjs.com/en/components/alerts/#colored-border

<template>
    <v-app>
        <v-alert
                border="left"
                colored-border
                color="deep-purple accent-4"
                elevation="2"
        >
            Aliquam eu nunc. Fusce commodo aliquam arcu. In consectetuer turpis ut velit. Nulla facilisi..

            Morbi mollis tellus ac sapien. Fusce vel dui. Praesent ut ligula non mi varius sagittis. Vivamus consectetuer hendrerit lacus. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi.
        </v-alert>
    </v-app>
</template>

Теперь вставим компонент в наш шаблон welcome.blade.php для этого после

<example-component></example-component>

просто добавим

<test-component></test-component>

Осталось только подключить компонент в resources/js/app.js, для этого после подключения example-component добавим по аналогии подключение нашего тестового компонента:

Vue.component('test-component', require('./components/TestComponent.vue').default);

Перейдем на главную страницу http://vuetest.loc/ и увидим в самом низу подключенный компонент Vuetify.

Подключенный тестовый компонент Vuetify.

На этом подключение Vuetify к Ларавел закончено.

Только добавим в общий шаблон resources/views/layouts/app.blade.php подключение иконочного шрифта, чтобы в компонентах Vuetify корректно отображались иконки:

<link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">

Хостинг для ваших проектов