Lumen的反向路由.呼叫路由器的名字


Reverse routing in Lumen. Call Router by it's name

我有一些路由定义如下:

$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路由和好的设计指南。