Обратный маршрут в Люмен. Звоните Маршрутизатор по его имени

У меня есть некоторые маршруты, определенные ниже:

$app->get('/user/posts',  [
"as"   => 'user.posts',
"uses" => 'UserController@getPosts'
]);

$app->get('/user/ads',  [
"as"   => 'user.ads',
"uses" => 'UserController@getAds'
]);

Можно ли назвать эти два маршрута по их названию внутри моего третьего маршрута (ниже)? Что-то вроде обратной маршрутизации?

$app->get('/user/all',  function() use ($app){
/** This does not work
$request = Request::create('MyRouteName', 'GET');
// I can't use the Route class in Lumen
$response = Route::dispatch($request);
**/
return [
"posts" => Request::response_from('user.posts'),
"ads"   => Request::response_from('user.ads')
];
});

Я хотел бы такой метод, как Request::response_from($routeNameOrUri) которые могут получить данные из маршрута (вызывая действие контроллера)

-1

Решение

Судя по всему, у вас слишком много логики в ваших контроллерах, где вы можете легко подтолкнуть это к модели и заставить свой маршрутизатор просто указывать на различные функции контроллера, которые связаны с этой моделью (в некотором смысле).

Обычно вы хотите, чтобы ваш маршрутизатор не имел встроенных функций, так как они не могут быть кэшированы и работают намного медленнее. Использование фасадов также является признаком того, что вы, вероятно, делаете что-то не так.

Как я уже говорил, вам лучше извлекать любые данные, которые вы извлекаете, в модель пользовательских сообщений и модель пользовательских объявлений, а действие контроллера дает то, что ему нужно.

/user/posts -> UserController@posts -> User->posts

/user/ads -> UserController@ads -> User->ads

/user/all -> UserController@all -> User->posts() & User->ads() or User->all()

Если ваша цель состоит в том, чтобы это был API, я настоятельно рекомендую изучить, что такое RESTful маршрутизация и хорошие рекомендации по дизайну.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]