2017-06-15 55 views
0

我正在使用Laravel 5.4,VueJS,AXIOS,VueRouter的應用程序。 VueRouter負責所有應用程序的導航,除以下航線配置:移動到下一個路線,如果找不到一些URL

<?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}是隨機生成的字符串,然後扔進D B。可以通過我的一個模型訪問。據我瞭解,我可以做這樣的事情:

Route::get('/{some-string}', '[email protected]')

配售這個包羅萬象應該工作上面。但是,如果/{some-string}與數據庫中的任何內容不匹配,我寧願將它處理爲catchall,它將服務於home.blade.php

是否有任何干淨的方式來處理此問題?

回答

0

你基本上描述了RedirectIfAuthenticated中間件,至少這是我將如何處理這個問題。利用中間件來檢查用戶的身份驗證級別,並在將它們提供給應用程序之前執行任何路由匹配。

+0

這是一個很好的觀點 - 甚至沒有想過要以這種方式解決問題。我感覺合理! – mdobrenko