2013-08-21 75 views
4

是否可能在被路由文件處理之前修改請求?是否有可能在Laravel的路由文件處理之前修改請求?

基本上我想要構建的應用程序將有數百個slu URL URL。但是slu will會導致不同的控制器。爲了達到這個目的,我將在redis中保留key:values對。

例如:

// slug = domain.com/slug-one 
// Would route to 
Route::get('pages/{id}', '[email protected]'); 

// slug = domain.com/slug-two 
// Would route to 
Route::get('articles/{id}', '[email protected]'); 

對我來說,最好的辦法是修改的前過濾器的請求filters.php

App::before(function($request) 
{ 
    // Do Redis Lookup. If match change request path 
    $request->path = "$controller/$id"; 
}); 

希望您能指教。

回答

3

您無法更改過濾器中的請求路由,因爲在路由解析後應用了過濾器。

一種方法是定義一個這樣的路線:

Route::get('/{$request}', '[email protected]'); 

然後slugRedirect裏面你做你的Redis查找然後調用(或301重定向)正確的控制器這樣的:

// Create a new separate request 
$request = Request::create('/articles/1', 'GET'); 
// Dispatch the new request to a new route 
$response = Route::dispatch($request); 
// Fetch the response (in your case, return it) 

我還沒有測試過,請讓我知道它是否工作。

+0

沒有那個不好。基本上所有的slu would都是重定向不是我想要的。改變路徑是我需要做的。 – Lee

+0

這就是爲什麼我說你可以用正確的參數調用正確的控制器(所以沒有用戶重定向)。我已經添加了一些信息,說明爲什麼你不能在一個過濾器中改變路由。 – Atrakeur

+0

我不知道Route :: dispatch TY。雖然我喜歡Laravel,但Docs有一點苗條。 – Lee

相關問題