是否可能在Laravel中的路由文件处理之前修改请求?

时间:2013-08-21 07:47:55

标签: laravel laravel-4

是否可能在路由文件处理之前修改请求?

基本上我要构建的应用程序将有数百个slug URL。但是slu will会导致不同的控制器。为了达到这个目的,我将保留key:值对redis。

例如:

// slug = domain.com/slug-one
// Would route to
Route::get('pages/{id}', 'PagesController@index');

// slug = domain.com/slug-two
// Would route to
Route::get('articles/{id}', 'ArticlesController@index');

对我来说,最好的方法是在filters.php

中的before过滤器中修改请求
App::before(function($request)
{
    // Do Redis Lookup.  If match change request path
    $request->path = "$controller/$id";
});

希望你能提出建议。

1 个答案:

答案 0 :(得分:3)

您无法在过滤器中更改请求路由,因为在路由解析后应用过滤器。

一种方法是定义这样的路线:

Route::get('/{$request}', 'PagesController@slugRedirect');

然后在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)

我没有测试过,如果有效,请告诉我。