У меня есть некоторые маршруты, определенные ниже:
$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)
которые могут получить данные из маршрута (вызывая действие контроллера)
Судя по всему, у вас слишком много логики в ваших контроллерах, где вы можете легко подтолкнуть это к модели и заставить свой маршрутизатор просто указывать на различные функции контроллера, которые связаны с этой моделью (в некотором смысле).
Обычно вы хотите, чтобы ваш маршрутизатор не имел встроенных функций, так как они не могут быть кэшированы и работают намного медленнее. Использование фасадов также является признаком того, что вы, вероятно, делаете что-то не так.
Как я уже говорил, вам лучше извлекать любые данные, которые вы извлекаете, в модель пользовательских сообщений и модель пользовательских объявлений, а действие контроллера дает то, что ему нужно.
/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 маршрутизация и хорошие рекомендации по дизайну.
Других решений пока нет …