簡體   English   中英

苗條的框架和自動組路由

[英]Slim framework and automated group routing

我想將所有邏輯移動到像這樣的控制器中:index.php文件:

$app = new Slim\App();
$app->group('/api/v1', function (\Slim\App $app) {
    $app->group('/users', UsersController::class );
});

UsersController.php文件:

class UsersController
{
    public function __construct(\Slim\App $app)
    {
        $app->getContainer()->get('db');

        $app->map(['GET'], '/', [$this, 'readAll']);
        $app->map(['POST'], '/', [$this, 'create']); //Create a new
        $app->map(['PUT'], '/', [$this, 'updateAll']);
        $app->map(['DELETE'], '/', [$this, 'deleteAll']);

        $app->map(['GET'], '/{id}', [$this, 'read']);
        //$app->map(['POST'], '/{id}', [$this, 'createNot']); //Method not allowed (405)
        $app->map(['PUT'], '/{id}', [$this, 'update']);
        $app->map(['DELETE'], '/{id}', [$this, 'delete']);
    }

    ...

}

但總是我得到錯誤:

傳遞給UsersController :: __ construct()的參數1必須是Slim \\ App的實例,給定的Slim \\ Container實例

該做什么工作?

當控制器未在容器中注冊時,默認情況下,Slim嘗試自行創建控制器並將容器實例傳遞給構造函數。 但是由於鍵入提示,控制器構造函數需要Slim\\App實例,因此會出現錯誤。

但是我認為您真正需要的是

$app->group('/app/v1', function () use ($app) {
   $app->group('/users', function () use ($app) {
      $app->get('/', UsersController::class . ':readAll');
      $app->post('/', UsersController::class . ':create');
      $app->put('/', UsersController::class . ':updateAll');
      $app->delete('/', UsersController::class . ':deleteAll');

      $app->get('/{id}', UsersController::class . ':read');
      $app->put('/{id}', UsersController::class . ':update');
      $app->delete('/{id}', UsersController::class . ':delete');
   });
});

因此,不再需要在控制器構造函數中設置路由。

但是,如果您仍然想按照現在的方式進行操作,則需要在容器中注冊控制器。

$container[UsersController::class] = function ($c) use($app) {
    return new UsersController($app);
});

就個人而言,我不建議這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM