2016-07-27 17 views
2

Wenn ich domain/something/someaction/10 geben werde ich dies mit der folgenden Routing-Regel fangen:Wie können mir den Weg zu einem Regler, wenn ich in einer Routing-Schließung in Laravel bin 5.2

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

nun innerhalb dieser Schließung Ich mag um diese Anfrage an die Aktion eines Controllers weiterzuleiten. Aber es könnte alles sein, zum Beispiel:

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

Das besondere Problem, das ich habe, ist, dass es etwa 30 Controller in diesem Projekt und 3 von 3 Aktionen durchgeführten Aufgaben in jedem von ihnen verhalten sich genau gleich. Mit einer Funktionalität wie der oben beschriebenen würde ich nur 3 Regeln in meiner Routes-Datei benötigen.

Antwort

0

Ich denke nicht, dass es viel Sinn macht, eine Controller-Methode von einer anderen Controller-Methode aufzurufen.

Ich denke, dass Ihre transformThisResource() Methode eigentlich einen Umleitungspfad zurückgeben sollte. Zum Beispiel Nehmen wir an, wenn Ihre Benutzer besucht domain/something/someaction/10(befindet sich in der Steuerung A) Sie einen Code ausführen möchten, die innerhalb eines anderen Controllers Verfahrens liegt (im Folgenden als Controller B bezeichnet) die /the/right/controller/method oder {resource}/right/controller/{id} an den URI reagiert. was ich würde in diesem Fall zu tun ist eine Umleitung von Controller zurückgeben A:

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

Der obige Code zu einem Link wie /the/right/controller/method?resource=domain/something&id=10 oder domain/something/right/controller/10 umleiten kann. Der einzige Unterschied zwischen den beiden Links besteht darin, wie Sie die Daten von Anforderung zu Anforderung übergeben. Einer verwendet Routenargumente und der andere verwendet GET-Parameter.