членовите

Креирање на CRUD апликација со Laravel и Vue.js

Во ова упатство заедно гледаме како да го напишете кодот на пример CRUD апликација, со Laravel и Vue.js.

La Апликација за една страница ќе ни овозможи да завршиме циклус на основни операции на DB: креирање, читање, ажурирање и бришење со Vue.js , Vue рутери и Рамка Ларавел .

Во денешно време, најпопуларните JS рамки се Angular JS и Vue JS. Angular JS и Vue JS се многу кориснички и најпопуларни JS рамки. Обезбедува управување со целиот проект или апликација без освежување на страницата и моќна валидација на jquery.

Vue доаѓа претходно спакуван со Laravel (заедно со Микс Ларавел , одлична алатка за пишување базирана на веб-пакет ) и им овозможува на програмерите да почнат да градат сложени апликации за една страница без да се грижат за транспилатори, пакети со кодови, изворни мапи или други „валкани“ аспекти на модерниот развој на предниот дел.

Барања за серверот

Php 7.4

Ларавел 8.х

MySQL,

Инсталирајте го проектот Laravel

Прво, отворете го Terminal и извршете ја следнава команда за да креирате нов проект Laravel:

composer create-project --prefer-dist laravel/laravel crud-spa

или, ако сте го инсталирале Laravel Installer како глобална зависност од композиторот:

laravel new crud-spa

Конфигурирајте детали за базата на податоци:

По инсталацијата Одете во root директориумот на вашиот проект, отворете ја датотеката .env и поставете ги деталите за базата на податоци на следниов начин:

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=<DATABASE NAME>
DB_USERNAME=<DATABASE USERNAME>
DB_PASSWORD=<DATABASE PASSWORD>

Инсталирајте npm зависности

Извршете ја следнава команда за да ги инсталирате зависностите од предниот дел:

npm install

После тоа, инсталирајте поглед ,  vue-рутер  e vue-axios . Vue-axios ќе се користи за повикување на Laravel backend API. Извршете ја следнава команда на терминалот:

npm install vue vue-router vue-axios --save

Креирајте миграција, модел и контролер

Креирајте шаблон за категорија, миграција и контролер. Извршете ја следнава команда за тоа:

php artisan make:model Category -mcr

- mcr  оваа тема ќе создаде модел, миграција и контролер користејќи синтеза на една команда.

Сега, отворете ја датотеката за миграција на категоријата од бази на податоци / миграција и заменете го кодот во функцијата горе () :

public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title');
        $table->text('description');
        $table->timestamps();
    });
}

Мигрирајте ја базата на податоци користејќи ја следнава команда:

php artisan migrate

Сега, отворете го шаблонот Category.php одapp/Models  и уредете го кодот во датотеката model Category.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model {

   use HasFactory;

   protected $fillable = ['title','description'];

}

?>

После тоа, отворете CategoryController.php и додадете го кодот во методите за индексирање, складирање, ажурирање и бришење на следниов начин:

<?php

namespace App\Http\Controllers;

use App\Models\Category;
use Illuminate\Http\Request;

class CategoryController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $categories = Category::all(['id','title','description']);
        return response()->json($categories);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $category = Category::create($request->post());
        return response()->json([
            'message'=>'Category Created Successfully!!',
            'category'=>$category
        ]);
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Category  $category
     * @return \Illuminate\Http\Response
     */
    public function show(Category $category)
    {
        return response()->json($category);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Category  $category
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Category $category)
    {
        $category->fill($request->post())->save();
        return response()->json([
            'message'=>'Category Updated Successfully!!',
            'category'=>$category
        ]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Category  $category
     * @return \Illuminate\Http\Response
     */
    public function destroy(Category $category)
    {
        $category->delete();
        return response()->json([
            'message'=>'Category Deleted Successfully!!'
        ]);
    }
}

Defiзавршете ги Рутите во web.php

Сега defiзавршете ги routes во датотеки web.php e api.php . Одете во папката routes и отворете ги датотеките web.php и api.php и ажурирајте го следново routes:

routes/web.php

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.
<?php
 
Route::get('{any}', function () {
    return view('app');
})->where('any', '.*');

routes/api.php

<?php
 
Route::resource('category',App\Http\Controllers\CategoryController::class)->only(['index','store','show','update','destroy']);

Создадете апликација Vue

Во овој чекор, одете во директориумот ресурс/прегледи, креирајте ја датотеката app.blade.php  и додадете го следниот код на app.blade.php:

<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" value="{{ csrf_token() }}"/>
        <title>Laravel Vue CRUD App</title>
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet" type="text/css">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
        <link href="{{ mix('css/app.css') }}" type="text/css" rel="stylesheet"/>
    </head>
    <body>
        <div id="app">
        </div>
        <script src="{{ mix('js/app.js') }}" type="text/javascript"></script>
    </body>
</html>

Создадете компонента за апликацијата Vue

Во овој чекор, одете во папката resource/js, креирајте ја папката components  и креирајте ги датотеките на следниов начин:

  • View app
  • Welcome.vue
  • Category/List.vue
  • Category/Add.vue
  • Category/Edit.vue

аплик. vue  тоа е главната датотека на нашата апликација Vue. Defiќе завршиме рутер-поглед  во таа датотека. Сите патеки ќе се појават во датотеката аплик. vue  .

Отворете ја датотеката Welcome.vue и ажурирајте го следниов код во таа датотека:

<template>
    <div class="container mt-5">
        <div class="col-12 text-center">
            <h1>Laravel Vuejs CRUD</h1>
        </div>
    </div>
</template>

Отворете ја датотеката App.vue и ажурирајте го кодот на следниов начин:

<template>
    <main>
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
            <div class="container-fluid">
                <router-link to="/" class="navbar-brand" href="#">Laravel Vue Crud App</router-link>
                <div class="collapse navbar-collapse">
                    <div class="navbar-nav">
                        <router-link exact-active-class="active" to="/" class="nav-item nav-link">Home</router-link>
                        <router-link exact-active-class="active" to="/category" class="nav-item nav-link">Category</router-link>
                    </div>
                </div>
            </div>
        </nav>
        <div class="container mt-5">
            <router-view></router-view>
        </div>
    </main>
</template>
 
<script>
    export default {}
</script>

Потоа, отворете resource / js / components / category / List.vue  и додадете го следниот код во датотеката:

<template>
    <div class="row">
        <div class="col-12 mb-2 text-end">
            <router-link :to='{name:"categoryAdd"}' class="btn btn-primary">Create</router-link>
        </div>
        <div class="col-12">
            <div class="card">
                <div class="card-header">
                    <h4>Category</h4>
                </div>
                <div class="card-body">
                    <div class="table-responsive">
                        <table class="table table-bordered">
                            <thead>
                                <tr>
                                    <th>ID</th>
                                    <th>Title</th>
                                    <th>Description</th>
                                    <th>Actions</th>
                                </tr>
                            </thead>
                            <tbody v-if="categories.length > 0">
                                <tr v-for="(category,key) in categories" :key="key">
                                    <td>{{ category.id }}</td>
                                    <td>{{ category.title }}</td>
                                    <td>{{ category.description }}</td>
                                    <td>
                                        <router-link :to='{name:"categoryEdit",params:{id:category.id}}' class="btn btn-success">Edit</router-link>
                                        <button type="button" @click="deleteCategory(category.id)" class="btn btn-danger">Delete</button>
                                    </td>
                                </tr>
                            </tbody>
                            <tbody v-else>
                                <tr>
                                    <td colspan="4" align="center">No Categories Found.</td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    name:"categories",
    data(){
        return {
            categories:[]
        }
    },
    mounted(){
        this.getCategories()
    },
    methods:{
        async getCategories(){
            await this.axios.get('/api/category').then(response=>{
                this.categories = response.data
            }).catch(error=>{
                console.log(error)
                this.categories = []
            })
        },
        deleteCategory(id){
            if(confirm("Are you sure to delete this category ?")){
                this.axios.delete(`/api/category/${id}`).then(response=>{
                    this.getCategories()
                }).catch(error=>{
                    console.log(error)
                })
            }
        }
    }
}
</script>

После тоа, отворете  resource /js/components/category/Add.vue  и ажурирајте го следниов код во датотеката:

<template>
    <div class="row">
        <div class="col-12">
            <div class="card">
                <div class="card-header">
                    <h4>Add Category</h4>
                </div>
                <div class="card-body">
                    <form @submit.prevent="create">
                        <div class="row">
                            <div class="col-12 mb-2">
                                <div class="form-group">
                                    <label>Title</label>
                                    <input type="text" class="form-control" v-model="category.title">
                                </div>
                            </div>
                            <div class="col-12 mb-2">
                                <div class="form-group">
                                    <label>Description</label>
                                    <input type="text" class="form-control" v-model="category.description">
                                </div>
                            </div>
                            <div class="col-12">
                                <button type="submit" class="btn btn-primary">Save</button>
                            </div>
                        </div>                        
                    </form>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    name:"add-category",
    data(){
        return {
            category:{
                title:"",
                description:""
            }
        }
    },
    methods:{
        async create(){
            await this.axios.post('/api/category',this.category).then(response=>{
                this.$router.push({name:"categoryList"})
            }).catch(error=>{
                console.log(error)
            })
        }
    }
}
</script>

После тоа, отворете  resource /js/components/category/Edit.vue  и ажурирајте го следниов код во датотеката:


<template>
    <div class="row">
        <div class="col-12">
            <div class="card">
                <div class="card-header">
                    <h4>Update Category</h4>
                </div>
                <div class="card-body">
                    <form @submit.prevent="update">
                        <div class="row">
                            <div class="col-12 mb-2">
                                <div class="form-group">
                                    <label>Title</label>
                                    <input type="text" class="form-control" v-model="category.title">
                                </div>
                            </div>
                            <div class="col-12 mb-2">
                                <div class="form-group">
                                    <label>Description</label>
                                    <input type="text" class="form-control" v-model="category.description">
                                </div>
                            </div>
                            <div class="col-12">
                                <button type="submit" class="btn btn-primary">Update</button>
                            </div>
                        </div>                        
                    </form>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    name:"update-category",
    data(){
        return {
            category:{
                title:"",
                description:"",
                _method:"patch"
            }
        }
    },
    mounted(){
        this.showCategory()
    },
    methods:{
        async showCategory(){
            await this.axios.get(`/api/category/${this.$route.params.id}`).then(response=>{
                const { title, description } = response.data
                this.category.title = title
                this.category.description = description
            }).catch(error=>{
                console.log(error)
            })
        },
        async update(){
            await this.axios.post(`/api/category/${this.$route.params.id}`,this.category).then(response=>{
                this.$router.push({name:"categoryList"})
            }).catch(error=>{
                console.log(error)
            })
        }
    }
}
</script>

DefiЗавршете ја патеката до апликацијата CRUD во рутерот Vue

Сега, мораш defiзаврши на Vue routes, и за да го направите ова, одете во папката  resource / js , креирајте ја датотеката route.js  и ажурирајте го следниов код во датотеката:

const Welcome = () => import('./components/Welcome.vue' /* webpackChunkName: "resource/js/components/welcome" */)
const CategoryList = () => import('./components/category/List.vue' /* webpackChunkName: "resource/js/components/category/list" */)
const CategoryCreate = () => import('./components/category/Add.vue' /* webpackChunkName: "resource/js/components/category/add" */)
const CategoryEdit = () => import('./components/category/Edit.vue' /* webpackChunkName: "resource/js/components/category/edit" */)

export const routes = [
    {
        name: 'home',
        path: '/',
        component: Welcome
    },
    {
        name: 'categoryList',
        path: '/category',
        component: CategoryList
    },
    {
        name: 'categoryEdit',
        path: '/category/:id/edit',
        component: CategoryEdit
    },
    {
        name: 'categoryAdd',
        path: '/category/add',
        component: CategoryCreate
    }
]

Овде користевме компоненти бавно вчитувањеvue JS управува со вчитувањето на компонентите на некој начин lazy со патеки, така што на DOM можете да вчитувате компоненти само кога се потребни преку патеки.

Вклучете ги зависностите на Vue.js во app.js

Сега треба да ги додадете сите патеки, vue-axios и други зависности.

resource / js / app.js

require('./bootstrap');
import vue from 'vue'
window.Vue = vue;

import App from './components/App.vue';
import VueRouter from 'vue-router';
import VueAxios from 'vue-axios';
import axios from 'axios';
import {routes} from './routes';
 
Vue.use(VueRouter);
Vue.use(VueAxios, axios);
 
const router = new VueRouter({
    mode: 'history',
    routes: routes
});
 
const app = new Vue({
    el: '#app',
    router: router,
    render: h => h(App),
});

Ажурирајте го webpack.mix.js

webpack.mix.js

const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js('resources/js/app.js', 'public/js')
    .postCss('resources/css/app.css', 'public/css', [
        //
    ]).vue();

Стартувај го серверот за развој

Отворете го терминалот и извршете ја оваа команда:

npm run watch
php artisan serve

Апри локален хост: 8000 во прелистувачот.

BlogInnovazione.it

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Последни написи

Veeam ја има најсеопфатната поддршка за ransomware, од заштита до одговор и обновување

Coveware од Veeam ќе продолжи да обезбедува услуги за одговор на инциденти на сајбер изнуда. Coveware ќе понуди форензика и способности за санација…

Април 23 2024

Зелена и дигитална револуција: Како предвидливото одржување ја трансформира индустријата за нафта и гас

Предвидливото одржување го револуционизира секторот за нафта и гас, со иновативен и проактивен пристап кон управувањето со постројките.…

Април 22 2024

Антимонополскиот регулатор на Обединетото Кралство го покренува алармот на BigTech поради GenAI

Обединетото Кралство CMA издаде предупредување за однесувањето на Big Tech на пазарот на вештачка интелигенција. Таму…

Април 18 2024

Casa Green: енергетска револуција за одржлива иднина во Италија

Уредбата за „Case Green“, формулирана од Европската унија за подобрување на енергетската ефикасност на зградите, го заврши својот законодавен процес со…

Април 18 2024

Читајте иновации на вашиот јазик

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Следете нас