4

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

基本上,我要构建的应用程序将有数百个 slug URL。但是蛞蝓会导致不同的控制器。为了实现这一点,我将在 redis 中保留 key:values 对。

例如:

// 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";
});

希望你能给点建议。

4

1 回答 1

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)

我还没有测试过,请告诉我它是否有效。

于 2013-08-21T07:55:45.230 回答