Հոդվածներ

CRUD հավելվածի ստեղծում Laravel-ի և Vue.js-ի միջոցով

Այս ձեռնարկում մենք միասին տեսնում ենք, թե ինչպես գրել օրինակ CRUD հավելվածի կոդը՝ Laravel-ի և Vue.js-ի հետ:

La Մեկ էջի դիմում թույլ կտա մեզ լրացնել հիմնական գործողությունների ցիկլը DB-ում. ստեղծել, կարդալ, թարմացնել և ջնջել Vue.js , Vue Routers և Լարավել Շրջանակ .

Մեր օրերում ամենահայտնի JS շրջանակներն են Angular JS-ը և Vue JS-ը: Angular JS-ը և Vue JS-ը շատ հարմար և ամենահայտնի JS շրջանակներն են: Այն ապահովում է ամբողջ նախագծի կամ հավելվածի կառավարում` առանց էջը թարմացնելու և հզոր jquery վավերացում:

Vue-ն գալիս է նախապես փաթեթավորված Laravel-ի հետ (հետ Laravel Mix , հիանալի հեղինակային գործիք, որը հիմնված է վեբ փաթեթ ) և թույլ է տալիս ծրագրավորողներին սկսել բարդ մեկ էջի հավելվածներ ստեղծել՝ առանց անհանգստանալու տրանսպիլյատորների, կոդերի փաթեթների, սկզբնաղբյուրների քարտեզների կամ ժամանակակից ֆրոնտետի զարգացման այլ «կեղտոտ» ասպեկտների մասին:

Սերվերի պահանջները

Php 7.4

Laravel 8.x

MySQL

Տեղադրեք Laravel նախագիծը

Նախ, բացեք Տերմինալը և գործարկեք հետևյալ հրամանը՝ նոր laravel նախագիծ ստեղծելու համար.

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

կամ, եթե դուք տեղադրել եք Laravel Installer-ը որպես կոմպոզիտորի գլոբալ կախվածություն.

laravel new crud-spa

Կարգավորել տվյալների բազայի մանրամասները.

Տեղադրվելուց հետո գնացեք ձեր նախագծի արմատական ​​գրացուցակ, բացեք .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 ,  vue-երթուղիչ  e vue-axios . Vue-axios-ը կօգտագործվի Laravel backend API-ն կանչելու համար: Գործարկեք հետևյալ հրամանը տերմինալի վրա.

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

Ստեղծեք միգրացիա, մոդել և վերահսկիչ

Ստեղծեք կատեգորիայի ձևանմուշ, միգրացիա և վերահսկիչ: Դրա համար գործարկեք հետևյալ հրամանը.

php artisan make:model Category -mcr

- mcr  Այս թեման կստեղծի Model, Migration և Controller՝ օգտագործելով մեկ հրամանի սինթեզ:

Այժմ բացեք կատեգորիայի միգրացիայի ֆայլը տվյալների բազաներ / միգրացիա և ծածկագիրը փոխարինեք ֆունկցիայի մեջ վերև () :

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 Router-ում

Այժմ դուք պետք է 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-ն ունի ամենաընդգրկուն աջակցություն փրկագինին՝ պաշտպանությունից մինչև պատասխան և վերականգնում

Veeam-ի Coveware-ը կշարունակի տրամադրել կիբեր շորթման միջադեպերի արձագանքման ծառայություններ: Coveware-ը կառաջարկի դատաբժշկական և վերականգնման հնարավորություններ…

23 Ապրիլ 2024

Կանաչ և թվային հեղափոխություն. Ինչպես է կանխատեսելի սպասարկումը փոխակերպում նավթի և գազի արդյունաբերությունը

Կանխատեսելի սպասարկումը հեղափոխություն է անում նավթի և գազի ոլորտում՝ կայանի կառավարման նորարարական և ակտիվ մոտեցմամբ:…

22 Ապրիլ 2024

Մեծ Բրիտանիայի հակամենաշնորհային կարգավորիչը բարձրացնում է BigTech-ի ահազանգը GenAI-ի վերաբերյալ

Մեծ Բրիտանիայի CMA-ն նախազգուշացում է տարածել արհեստական ​​ինտելեկտի շուկայում Big Tech-ի վարքագծի վերաբերյալ: Այնտեղ…

18 Ապրիլ 2024

Casa Green. էներգետիկ հեղափոխություն կայուն ապագայի համար Իտալիայում

Շենքերի էներգաարդյունավետության բարձրացման նպատակով Եվրոպական միության կողմից ձևակերպված «Քեյս Գրին» հրամանագիրը իր օրենսդրական գործընթացն ավարտել է…

18 Ապրիլ 2024

Կարդացեք նորարարությունը ձեր լեզվով

Նորարարության տեղեկագիր
Բաց մի թողեք նորարարության մասին ամենակարևոր նորությունները: Գրանցվեք դրանք էլփոստով ստանալու համար:

Հետեւեք մեզ