是否可能在路由文件处理之前修改请求?
基本上我要构建的应用程序将有数百个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";
});
希望你能提出建议。
答案 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)
我没有测试过,如果有效,请告诉我。