-1

我有一些定义如下的路线:

$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)可以从路由中获取数据的方法(通过调用控制器的操作)

4

1 回答 1

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

于 2015-07-27T18:17:52.663 回答