Laravel、惯性和 vuejs

Posted

技术标签:

【中文标题】Laravel、惯性和 vuejs【英文标题】:Laravel, inertiajs and vuejs 【发布时间】:2021-06-02 21:39:10 【问题描述】:

我正在做一个使用 laravel、inertiajs 和 vuejs 的项目。我总是得到 404 |当我尝试从数据库中删除用户时未找到错误。当我单击带有 deleteUser 方法的按钮时,我想删除用户。可能有什么问题?

路线

Route::delete('/destroy/user', [AppController::class, 'destroy'])->name('users.destroy');

控制器

public function destroy(User $user)
    
        $user->delete();
    

vue

<template>
    <app-layout>
        <div v-for="user in users" :key="user.id">
            <div class="flex bg-white border px-6 py-6 rounded-sm max-w-2xl mx-auto mt-6">
                <img :src="user.profile_photo_url"  class="h-14 w-14 rounded-full"/>
                <div class="flex-1">
                    <span class="ml-2 text-lg text-black font-semibold">
                        user.name
                    </span>
                    <span class="float-right ml-2">
                        <button @click="deleteUser" class="border border-purple-300 px-4 py-1 rounded-full text-purple-600 hover:bg-purple-600 hover:text-white hover:border-transparent">Follow</button>
                    </span>
                    <br/>
                    <span class="ml-2 text-gray-500 font-medium">
                        Laravel and Vuejs
                    </span>
                </div>
            </div>
        </div>
    </app-layout>
</template>

<script>
    import AppLayout from '@/Layouts/AppLayout'

    export default 
        components: 
            AppLayout,
        ,

        props: ['users'],

        data()
            return
                form:
                    user_id:''
                
            
        ,

        methods:
            deleteUser() 
            if (confirm('Are you sure you want to delete this contact?')) 
                this.$inertia.delete(`/destroy/$this.users.id`)
                .then(() => 
                )
            
            
        
    
</script>

【问题讨论】:

您的完整网址是什么?由 laravel 生成 在浏览器中使用public url 或`pretty url ? localhost:8000/users 是我的网址 你的请求方法是“DELETE”吗? 【参考方案1】:

删除操作应接受迭代中的当前用户作为参数。

<button @click="delete(user)" class="border border-purple-300 px-4 py-1 rounded-full text-purple-600 hover:bg-purple-600 hover:text-white hover:border-transparent">Follow</button>

那么您应该将用户 ID 作为参数传递给您的删除路由:

methods: 
    delete(user) 
        if (confirm('Are you sure you want to delete this contact?')) 
            this.$inertia.delete(`/destroy/$user.id`);
        
    

【讨论】:

【参考方案2】:

您可以像这样将数据传递给您的方法:

<button @click="deleteUser(user)">Delete</button>

methods: 
deleteUser: function(user)
this.$inertia.delete(this.route('users.destroy'), user))

这是因为您在用户控制器中的删除方法要求用户变量。

【讨论】:

以上是关于Laravel、惯性和 vuejs的主要内容,如果未能解决你的问题,请参考以下文章

Laravel、惯性和 vuejs

如何在惯性和 Laravel 8 中禁用 devtools

Laravel 惯性链接与 id

对惯性响应和 json 响应使用相同的方法 Laravel Jetstream

如何用惯性js和laravel 8.0上传文件

laravel 8 +惯性js中的会话超时