如果找不到某个网址,请转到下一条路线

时间:2017-06-15 15:01:57

标签: laravel-5

我正在使用Laravel 5.4,VueJS,AXIOS,VueRouter开发应用程序。 VueRouter负责应用程序中的所有导航,保存下面的路由配置:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Auth::routes();


Route::get('/{catchall?}', ['as' => 'start', 'middleware' => 'auth', function() {
    return view('home')->with([...]);
}])->where('catchall', '.*');

这实质上将用户重定向到包含<router-link></routerlink>的“基本”刀片文件。

但是,我现在正在我的应用程序中实现一个页面,任何人都可以访问(不需要auth中间件),并完全使用不同的布局(因此需要一个新的刀片文件)。

最好是这样访问:

app.sample.com/{some-string}

而不是像这样的其他东西:

app.sample.com/survey/{some-string}

{some-string}是随机生成的字符串,然后被抛入数据库。可以通过我的一个模特访问。据我所知,我可以这样做:

Route::get('/{some-string}', 'SomeController@somemethod')

将此置于捕获之上应该有效。但是,如果/{some-string}与数据库中的任何内容都不匹配,我希望它可以通过catchall处理,它将为home.blade.php

提供服务

有没有干净的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您实际上是在描述RedirectIfAuthenticated中间件,至少我会如何处理这个问题。利用中间件检查用户的身份验证级别,并在将其提供给应用程序之前进行任何路由匹配。