-1

以下のように定義されたいくつかのルートがあります。

$app->get('/user/posts',  [
        "as"   => 'user.posts',
        "uses" => 'UserController@getPosts'
        ]);

$app->get('/user/ads',  [
        "as"   => 'user.ads',
        "uses" => 'UserController@getAds'
        ]);

これら 2 つのルートを 3 番目のルート (下記) 内で名前で呼び出すことは可能ですか? 逆ルーティングみたいなもの?

$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 に答える