4

Slim フレームワークを使用して API を作成しています。現在、単一のファイルを使用してルートを作成し、それにクロージャーを渡します。

$app->get('/', function($req, $resp){
//Code...
})

しかし、私のファイルが急速に大きくなっていることに気付きました。私がやりたいのは、代わりにコントローラーを使用することです。そのため、コントローラー クラスを用意し、以下のようにインスタンス/静的メソッドをルートに渡すだけです。

class HomeController
{
   public static function index($req, $resp){}
}

次に、関数をルートに渡します

$app->get('/', HomeController::index);

これを試してみましたが、うまくいきません。これを使用してファイルを管理する方法はあるのでしょうか。

4

5 に答える 5

11

コントローラーをファンクターに変換します。

class HomeController
{
    public function __invoke($req, $resp) {}
}

次に、次のようにルーティングします。

$app->get('/', HomeController::class);

参考までに、

于 2015-12-31T00:15:59.517 に答える
1

Nikic の Fast Route は非常に最小限のルーターであるため、より大きなフレームワークの優れた機能の一部が削除されています。基本的な解決策は次のとおりです。

ルート.php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app->get('/', function($req, $resp, $args) use ($app){return FooBar::asdf($app, $req, $resp);});

コントローラーは \Psr\Http\Message\ServerRequestInterface を要求として使用します。\Psr\Http\Message\ResponseInterface を応答として使用します。

class FooBar{
    static public function asdf(Slim\App $app, Request $req, Response $resp, $args = [])
    {
        return $resp->withJson(['asf']);
    }
}
于 2017-07-16T11:37:51.207 に答える