Я использую Laravel 5.4, и теперь я хочу сделать динамический маршрут к контроллеру, что означает, что я могу получить доступ UserController
а также Profile
Функция бросить маршрут напрямую, например.
GET http://localhost/user/profile?userid=123
URL-адрес примера выше UserController
и функция profile
с динамическими параметрами после ?
, И если я хочу получить доступ к другому контроллеру, мне просто нужно изменить user
парам к Controller
название.
Я создал такой маршрут, и он работает.
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());
});
Но я не знаю, как передать параметры.
Есть ли другой лучший способ сделать это?
Я не уверен, правильно ли я вас понимаю, но вы можете проверить следующее.
Route::get('v1/{controller_name}/{function_name}/{query?}',
function ($controller_name, $function_name, $query = null) {
var_dump($controller_name, $function_name, $query);
});
посещение HTTP: // локальный / v1 / мой-контроллер / моя функция / мой-параметр URL выходы:
string 'my-controller' (length=13)
string 'my-function' (length=11)
string 'my-parameter' (length=12)
посещение HTTP: // локальный / v1 / мой-контроллер / моя функция URL выходы:
string 'my-controller' (length=13)
string 'my-function' (length=11)
null
А чтобы расширить идею дальше, можно написать:
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: // локальный / v1 / мой-контроллер / моя функция / мой-параметр / мой-параметр2
string 'my-controller' (length=13)
string 'my-function' (length=11)
string 'my-parameter' (length=12)
string 'my-parameter2' (length=13)
HTTP: // локальный / v1 / мой-контроллер / моя функция
string 'my-controller' (length=13)
string 'my-function' (length=11)
null
null
Тогда вы можете использовать:
// ...
return $controller->callAction($function_name, $parameters = [
'param1' => $query,
'param2' => $query2,
]);
// ...
Других решений пока нет …