我有一些路线定义如下:
$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)
这样的方法可以从路线获取数据(通过调用控制器的动作)
答案 0 :(得分: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路由是什么以及良好的设计指南。