Laravel 5.5 и Vue.js Пример проекта CRUD

Laravel 5.5

laravel

Laravel 5.5 и Vue.js Пример проекта CRUD

На основе статьи http://laraveldaily.com/quick-start-laravel-5-5-vue-js-simple-crud-project/

Ссылка на полный код проекта https://github.com/LaravelDaily/Laravel-Vue-First-CRUD

Vue.js становится все более популярным, поэтому многим пригодится пример простого проекта для быстрого старта.

Мы будем работать с данными компаний - стандартный набор операций CRUD (Create/Read/Update/Delete, то есть добавление, показ, изменение и удаление):

Начнем с Laravel, затем перейдем к Vue.js.

Этап 1: Создание проекта Laravel

Шаг 1: Создадим проект с помощью команды laravel new или composer create-project.

Шаг 2: Выполним php artisan make:auth для добавления в проект стандартной регистрации и аутентификации.

Шаг 3: Cкопируем файл resources/views/auth/login.blade.php в папку resourses/views/admin/companies/index.blade.php и удалим лишний код. Получим:

Этап 2: Работа с базой данных и API

Шаг 1: Выполним команду php artisan make:model Company -m

Получим файл app/Company.php, в который добавим свойство $fillable:

Изменим файл миграции:

Далее создадим контроллер для реализации CRUD операций. При этом нам не подходит обычный способ, так как мы хотим реализовать API c такой структурой:

Поэтому вызываем команду make с указанием полного пути: php artisan make:controller Api/V1/CompaniesController --resource

И добавим код в методы контроллера:

И наконец, укажем правила в routes/api.php:

Как видите, я добавил префикс api и исключил методы create и  edit.

Важноe замечание: в этой статье я не буду реализовать аутентификацию, но в реальном проекте вы должны защитить роуты через посредника (middleware) или Laravel Passport.

Проверить API можно с помощью Postman.

Этап 3: Начинаем работу с Vue.js

Для начала работы все уже готово, вам не нужно ничего устанавливать. Смотрим файл resources/assets/js/app.js:

Тег с id="app" находится в resources/views/layouts/app.blade.php:

Нам нужен Vue-router. Выполним команду npm install && npm install vue-router

Далее выполним команду npm run watch, которая компилирует файл resources/assets/js/app.js в public/js/app.js. Второй файл был сгенерирован командой make:auth. Обратите внимание на последние строки в layouts/app.blade.php:

npm run watch также запускает процесс, который будет компилировать файл заново при любом его изменении.

Этап 4: Vue-router и компонент Index/List

Далее применим Vue-router для привязки к различным представлениям CRUD. Сначала откроем файл resources/views/admin/companies/index.blade.php и загрузим роутер:

Обратите внимание на строку с router-view. Именно в этом месте будет загружен companiesIndex. Давайте создадим его: откроем файл resources/assets/js/app.js и добавим такой код:

Можно посмотреть в документации принципы работы Router, но если кратко, то мы привязали каждый роут к конкретному vue-компоненту - CompaniesIndex, CompaniesCreate и CompaniesEdit.

Теперь давайте их создадим. Вот файл resources/assets/js/components/companies/CompaniesIndex.vue:

Строка с <router-link :to="{name:'createCompany'}"> создается связь с компонентом, который будет загружаться без полной перезагрузки страницы.

Строка таблицы <tr v-for="company, index in companies"> будет загружать данные и показывать каждое поле.

Данные для таблицы приходят по API через js: axios.get('/api/v1/companies')->app.companies = resp.data

Еще есть событие для кнопки Удалить (Delete), которое вызывает метод API axios.delete('/api/v1/companies/'+id) и перезагружает таблицу (но не всю страницу)

Этап 5: Vue-компоненты Create/Edit (Создание/Редактирование)

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

Файл resources/assets/js/components/companies/CompaniesCreate.vue:

Мы видим:

  • тег <template>  для основного контента, тег <script> - для js
  • привязку полей ввода к соответствующим моделям: input type="text" v-model="company.name"
  • форму с событием отправки v-on:submit="saveForm()" и метод, вызывающий API: axios.post('/api/v1/companies', newCompany)

После отправки формы Vue.js перезагружает только таблицу, а не всю страницу.

Наконец, изменим файл resources/assets/js/components/companies/CompaniesEdit.vue. Он будет выглядеть аналогично, поэтому посмотрим только на js:

Видео (англ)

все материалы по Laravel 5