2017-05-18 4 views
2

Ich benutze Laravel 5.4 und jetzt möchte ich dynamische Route zum Controller, die ich kann auf UserController und Profile Funktion Weg direkt, zum Beispiel.Laravel dynamische Controller Route

GET http://localhost/user/profile?userid=123 

Das Beispiel URL oben UserController zugreift und Funktion profile mit dynamischen Parametern nach ?. Und wenn ich auf andere Controller zugreifen möchte, muss ich nur ändern user param zu Controller Namen.

Ich habe eine Route wie diese erstellt und es funktioniert.

Route::get('v1/{controller_name}/{function_name}/{query?}', function ($controller_name, $function_name){ 

    $app = app(); 
    $controller = $app->make('\App\Http\Controllers\Api\\'.$controller_name.'Controller'); 
    return $controller->callAction($function_name, $parameters = array()); 
}); 

Aber ich weiß nicht, wie Parameter übergeben werden.

Jeder andere bessere Weg, dies zu tun?

Antwort

1

Ich bin mir nicht sicher, ob ich Sie richtig verstehe, aber vielleicht möchten Sie Folgendes überprüfen.

Route::get('v1/{controller_name}/{function_name}/{query?}', 
     function ($controller_name, $function_name, $query = null) { 
    var_dump($controller_name, $function_name, $query); 
}); 

Besuch http://localhost/v1/my-controller/my-function/my-parameter URL Ausgänge:

string 'my-controller' (length=13) 
string 'my-function' (length=11) 
string 'my-parameter' (length=12) 

Besuch http://localhost/v1/my-controller/my-function URL Ausgänge:

string 'my-controller' (length=13) 
string 'my-function' (length=11) 
null 

Und die Idee weiter zu verlängern, ist es möglich, schreiben:

Route::get('v1/{controller_name}/{function_name}/{query?}/{query2?}', 
     function ($controller_name, $function_name, $query = null, $query2 = null) { 
    var_dump($controller_name, $function_name, $query, $query2); 
}); 

http://localhost/v1/my-controller/my-function/my-parameter/my-parameter2

string 'my-controller' (length=13) 
string 'my-function' (length=11) 
string 'my-parameter' (length=12) 
string 'my-parameter2' (length=13) 

http://localhost/v1/my-controller/my-function

string 'my-controller' (length=13) 
string 'my-function' (length=11) 
null 
null 

Dann können Sie verwenden:

// ... 
return $controller->callAction($function_name, $parameters = [ 
    'param1' => $query, 
    'param2' => $query2, 
]); 
// ... 
+0

ich meine eigene Lösung, aber Dank für Ihre Hilfe sowieso gefunden habe. – vietnguyen09