Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel:当给定参数无效时,将用户重定向到自定义404页面_Laravel_Vue.js - Fatal编程技术网

Laravel:当给定参数无效时,将用户重定向到自定义404页面

Laravel:当给定参数无效时,将用户重定向到自定义404页面,laravel,vue.js,Laravel,Vue.js,我制作了一个应用程序,用户可以在其中创建一些文件并查看模板中的所有数据。每篇论文都有一个创建时生成的联合代码 我在我的web.php中定义了加入路由,如下所示: Route::get('/conceptPaper/lobby/{joincode}', 'App\Http\Controllers\ConceptPaperController@join'); 以及控制器中的连接函数,方法如下: public function join($joincode) { try {

我制作了一个应用程序,用户可以在其中创建一些文件并查看模板中的所有数据。每篇论文都有一个创建时生成的联合代码

我在我的web.php中定义了加入路由,如下所示:

Route::get('/conceptPaper/lobby/{joincode}', 'App\Http\Controllers\ConceptPaperController@join');
以及控制器中的连接函数,方法如下:

public function join($joincode)
    {
        try { 
            $conceptPaper = ConceptPaper::where('join_code', $joincode)->firstOrFail();
            return response()->json($conceptPaper);
        } catch(ModelNotFoundException $e)
        {
            return view('errors.404');
        }
    }
我使用firstOrFail检查连接代码是否存在。如果存在,则应返回响应,否则应将用户重定向到自定义404页面

我创建了一个自定义组件,它将连接代码作为路由参数获取,并显示了概念文件

{
        path: '/conceptPaper/lobby/:joincode',
        name: 'conceptPaper',
        component: () => import('./views/ConceptPaper.vue')
    },
因此,当用户使用正确的代码加入大厅时,他将被重定向到包含相应纸张中所有数据的页面:

showPaper: async function (conceptPaper) {
      const joinCode = conceptPaper.join_code;
      this.$router.push({ name: "conceptPaper", params: { joincode: joinCode }, });
    },
我的问题是,当用户输入错误的代码时,他仍然会被重定向到视图。当我在网络选项卡中检查响应时,它显示404页面


我认为我建造它从根本上是错误的。谁能告诉我怎么做才是正确的方法吗?当用户键入正确的连接代码时,他应该看到ConceptPaper.vue视图。当代码出错时,他应该被重定向到404页面。

根据您的代码,我假设您正在使用VueJs作为SPA,并且您正在从laravel后端API检索数据

基于此,join函数应该返回在前端使用的json数据,但如果未找到
ConceptPaper
,则返回一个视图而不是json,json不会有太大变化,因为您只是更改前端接收的数据,但前端组件没有改变

我要做的是删除try-catch块,它将从API返回404响应,并在vue中处理404情况,并在vue中创建一个
NotFound
视图

拉维尔

public function join($joincode)
{
    $conceptPaper = ConceptPaper::where('join_code', $joincode)->firstOrFail();
    return response()->json($conceptPaper);
}
Vue

router/index.js

const routes = [
  // previous routes
  {
    path: '/not-found',
    name: 'NotFound',
    component: () => import('../views/NotFound.vue')
  }
]
NotFound.vue

<template>
// page here
</template>
export {
    name: 'NotFound'
}
axios.get('/conceptPaper/lobby/-1000')
  .catch(function (error) {
    if (error.response.status === 404) {
        this.$router.push('NotFound');
    }
  });