2016-07-27 1 views
2

Laravel 5.2にIコントローラのアクションへのルート行い、私は次のルーティングルールでこれをキャッチします。今私は<code>domain/something/someaction/10</code>を入力した場合どのようにルーティング閉鎖にいるとき

Route::get('/{resource}/someaction/{id}', function($resource,$id){ 
    //do something 
}); 

、このクロージャ内で私が欲しいですこの要求をコントローラのアクションに転送します。それは例えば何でも、可能性がありしかし:

$controller_name = transformThisResource($resource).'Controller'; 
$controller = new $controller_name; 
$controller->someaction($id); 

私が午前特定の問題は、このプロジェクトでは約30のコントローラとそれらのそれぞれに3つのアクションによって行わ3つのタスクがまったく同じ振る舞いがあるということです。上記のような機能では、ルートファイルに3つのルールしか必要としません。

答えて

0

コントローラのメソッドを別のコントローラのメソッドから呼び出すことは意味がないと思います。

あなたのtransformThisResource()メソッドが実際にリダイレクトパスを返す必要があると思います。たとえば、あなたが他のコントローラのメソッド内に存在するいくつかのコードを実行したいユーザーの訪問がdomain/something/someaction/10は(コントローラーA内に存在する)ときURI /the/right/controller/methodまたは{resource}/right/controller/{id}に応答(以下、コントローラBと呼ぶ)としましょう。上記のコードは、/the/right/controller/method?resource=domain/something&id=10又はdomain/something/right/controller/10としてリンクにリダイレクトできる

public function controllerADefaultResponder($resource, $id) 
{ 
    return redirect(mapToUri($resource, $id)); 
} 

:私はこの場合に行うであろうことコントローラからリダイレクトを返すあります。 2つのリンクの唯一の違いは、要求から要求にデータを渡す方法を選択することです。 1つは経路引数を使用し、もう1つはGETパラメータを使用しています。

関連する問題