我有一些路由定义如下:
$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)
这样的方法,可以从路由中获取数据(通过调用控制器的动作)
从它的外观,你有太多的逻辑在你的控制器,你可以很容易地把它推到一个模型,让你的路由器只是指向不同的控制器函数绑定到该模型(在某种意义上)。
通常你希望你的路由器没有内联函数,因为它们不能被缓存,而且速度要慢得多。使用facade也表明你可能做错了什么。正如我之前所说的,你最好提取你正在检索到用户帖子模型和用户广告模型的任何数据,并让控制器动作得到它需要的东西。
/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路由和好的设计指南。