段塞我有一個像/locations/name-of-the-location.ID
Laravel:檢查蛞蝓的路線是等於在數據庫
我的路線的網址是:
Route::get('locations/{slug}.{location}', ['as' => 'locations.show', 'uses' => '[email protected]'])->where([
'location' => '[0-9]+',
'slug' => '[a-z0-9-]+'
]);
現在我要檢查,如果提供的鼻涕蟲是一樣的用我的模型保存在數據庫列'slug'中(因爲slug可能已經改變)。如果沒有,那麼我想重定向到正確的路徑。
哪裏可以做到這一點?我想到了\ App \ Providers \ RouteServiceProvider-但是當我嘗試在那裏使用Route::currentRouteName()
時,我得到NULL,可能是因爲在RouteServiceProvider的boot()方法中對於該方法來說「太早」。
我可以做的是使用path(),但對我來說這看起來有點髒,因爲我使用其他語言的路由前綴。
這裏就是我想(我用一個小的輔助類RouteSlug
) - 當然這是行不通的:
public function boot()
{
parent::boot();
if (strstr(Route::currentRouteName(), '.', true) == 'locations')
{
Route::bind('location', function ($location) {
$location = \App\Location::withTrashed()->find($location);
$parameters = Route::getCurrentRoute()->parameters();
$slug = $parameters['slug'];
if ($redirect = \RouteSlug::checkRedirect(Route::getCurrentRoute()->getName(), $location->id, $location->slug, $slug))
{
return redirect($redirect);
}
else
{
return $location;
}
});
}
}
爲什麼不把這個'LocationsController @ show'? – upful
我也使用編輯,銷燬和其他方法的slu g。我也有其他控制器中的slu so,所以我想在一個地方管理所有重定向。 – sugo
爲什麼重新發明輪子? https://github.com/cviebrock/eloquent-sluggable – ceejayoz