1. database를 생성한다.
2. .env파일에 데이터베이스 설정을 해준다.
1 2 3 4 5 6 | DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravelspa DB_USERNAME=root DB_PASSWORD=패스워드 | cs |
3. 모델 생성
1 | php artisan make:model Category -mcr | cs |
4. databases/migrations/TIMESTAMP_create_create_categories_table.php 다음과 같이 작성한다.
1 2 3 4 5 6 7 8 9 10 | public function up() { Schema::create('categories', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->text('image'); $table->timestamps(); }); } | cs |
5. 마이그레이션
1 | php artisan migrate | cs |
6. api설정
routes/api.php categproes 추가
1 2 3 4 5 6 7 8 9 10 11 | <?php use Illuminate\Http\Request; Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::resource('categories', 'CategoryController'); | cs |
7. app/Http/Controllers/CategoryController.php 파일의 store()메서드에 dd($request->all()); 입력
1 2 3 4 | public function store(Request $request) { dd($request->all()); } | cs |
8. resources/js/services/http_service.js 파일 생성
1 2 3 4 5 6 7 8 | import axios from 'axios'; export function http(){ return axios.create({ baseURL: 'http://laravelspa.test' }); } | cs |
9. Vuex 설치하기(상태관리도구)
Vuex는 Vue.js 애플리케이션에 대한 상태 관리 패턴 + 라이브러리 입니다. 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을 하며 예측 가능한 방식으로 상태를 변경할 수 있습니다. 또한 Vue의 공식 devtools 확장 프로그램과 통합되어 설정 시간이 필요 없는 디버깅 및 상태 스냅 샷 내보내기/가져오기와 같은 고급 기능을 제공합니다.
https://vuex.vuejs.org/kr/installation.html
1 | npm install vuex --save | cs |
10.resources/js/store.js 파일을 생성해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state:{ apiURL:'http://laravelspa.test', serverPath:'http://laravelspa.test' }, mutations:{}, actions:{} }); | cs |
11. http_service.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import store from '../store'; import axios from 'axios'; export function http(){ return axios.create({ baseURL: store.state.apiURL }); } export function httpFile(){ return axios.create({ baseURL: store.state.apiURL, headers:{ 'Content-Type' : 'multipart/form-data' } }); } | cs |
12. Vue.js를 사용하여 반응 형 모바일 우선 사이트를 구축하기 위해 세계에서 가장 널리 사용되는 프레임 워크 인 Bootstrap v4를 기반으로 BootstrapVue를 시작하십시오.
주소 : bootstrap-vue.js.org
1 | npm i bootstrap-vue | cs |
13. resources/js/app.js 설치한 패키지를 임포트해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import Vue from 'vue'; import App from './App.vue'; import router from './router'; import 'bootstrap/dist/css/bootstrap.css'; import 'bootstrap'; import BootstrapVue from 'bootstrap-vue'; Vue.use(BootstrapVue); new Vue({ el: '#app', router, render: h => h(App) }); | cs |
14. Cetegories.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | <template> <div class="container-fluid"> <h1 class="mt-4">Dashboard</h1> <ol class="breadcrumb mb-4"> <router-link to="/">Dashboardd</router-link> </ol> <div class="row"> <div class="col-xl-12"> <div class="card mb-4"> <div class="card-header d-flex"> <span> <i class="fas fa-chart-area mr-1"></i> Categories Menagemen </span> <button class="btn btn-primary btn-sm ml-auto" v-on:click="showNewCategoryModal"> <span class="fa fa-plus"></span>Create New </button> </div> <div class="card-body"> <table class="table"> <thead> <tr> <td>ID</td> <td>Name</td> <td>Image</td> <td>Action</td> </tr> </thead> <tbody> <td>1</td> <td>shirt</td> <td>image</td> <td> <button class="btn btn-primary btn-sm"> <span class="fa fa-edit"></span> </button> <button class="btn btn-denger btn-sm"> <span class="fa fa-trash"></span> </button> </td> </tbody> </table> </div> </div> </div> </div> <b-modal ref="NewCategoryModal" hide-footer title="Add New Category"> <div class="d-block"> <form v-on:submit.prevent="createCategory"> <div class="form-group"> <label for="name">Enter Name</label> <input type="text" v-model="categoryData.name" class="form-control" id="name" placeholder="Enter category name" /> </div> <div class="form-group"> <label for="image">Choose an image</label> <input type="file" v-on:change="attachImage" class="form-control" id="image" /> </div> <hr /> <div class="text-right"> <button type="button" class="btn btn-default" v-on:cllck="hideNewCategoryModal">Cancel</button> <button type="submit" class="btn btn-primary"> <span class="fa fa-check">Save</span> </button> </div> </form> </div> </b-modal> </div> </template> <script> export default { name: "category", data() { return { categoryData: { name: "", image: "" } }; }, methods: { attachImage() {}, hideNewCategoryModal() { this.$refs.NewCategoryModal.hide(); }, showNewCategoryModal() { this.$refs.NewCategoryModal.show(); }, createCategory() { console.log("form submitted"); } } }; </script> <style> </style> | cs |
'라라벨 > laravel Vue SPA' 카테고리의 다른 글
laravel vue spa CRUD Part1 (0) | 2020.02.25 |
---|---|
laravel spa vue-router, welcome.vue (0) | 2020.02.23 |
laravel spa 부트스트랩 템플릿 적용, fontawesome적용 (0) | 2020.02.23 |
laravel spa (Vuejs, vuex, SPA, vue-router) 디테일버전 laravel v6.2 (0) | 2020.02.23 |