我試圖安裝使用超薄框架版本3的API項目,我不知道是誰發的PSR-7和標記響應對象爲不可變的,我沒有看到任何在那裏使用(恕我直言,請解釋我,如果我錯了)。當它很苗條2時,事情變得更容易。現在我在很長一段時間後回到了苗條。具有slimframework是不可變的響應麻煩
我有一個方法後的路線,我得到的數據,並保存到數據庫中,我嘗試發送201響應代碼。所有的示例和文檔都向您展示瞭如何在index.php文件本身中更改響應代碼,但是我試圖從響應構建器中更改它,我嘗試使用工廠模式來提供不同的響應。問題是響應代碼始終保持200,無論我從響應構建器類調用什麼函數。我嘗試了很多論壇和不同的瘦身方式,但仍然無法將其拉高。我幾乎決定放棄PSR 7路由器的實施,並實施我自己的路由解決方案。但我記得不要再重新發明輪子,所以我作爲最後的嘗試來到這裏。以下是代碼。
路線定義
$app->post('/users', function(ServerRequestInterface $req, ResponseInterface $res) {
$data = $req->getParsedBody();
$model = new \Apex\Models\User(ApexDB::getInstance());
$jsonBuilder = ApexResponse::getBuilder('JSON', $res);
$control = new \Apex\Controllers\User($model, $jsonBuilder);
$control->create($data);
});
控制方法(抽象的,我只是將其設置)
public function create($data) {
if($this->model->save($data)) {
$this->response->build($data,201);
} else {
$this->response->build('error',400);
}
}
的JSON建設者
class JSONBuilder implements Response
{
public $response;
public function __construct($response)
{
$this->response = $response;
}
public function build($data, $status)
{
$response = $this->response->withJSON($data,$status);
return $response;
}
}
任何人都可以點我在正確的方向?
哦,你可能還需要考慮在'201'響應中返回保存的用戶對象的'id'。在猜測中包含指向該用戶資源(/ users /:id)的端點的「位置」標題也是一個好主意。 –
感謝您的詳細解答,是不是創建硬耦合來在控制器內創建模型實例?我以爲我可以使用構造函數注入?或服務容器?你認爲哪一個好? – Vignesh
我會使用構造函數注入模型,是的。 –