4

ルートファイルによって処理される前にリクエストを変更する可能性はありますか?

基本的に、私が構築しようとしているアプリには、何百ものスラッグ URL があります。しかし、ナメクジは別のコントローラーにつながります。これを実現するために、キーと値のペアを 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";
});

アドバイスいただければ幸いです。

4

1 に答える 1

3

ルートが解決された後にフィルターが適用されるため、フィルター内の要求ルートを変更することはできません。

1 つの方法は、次のようなルートを定義することです。

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 に答える