*
  • * Gib "irgendöpis" mit dem {@code echo} command aus. *
  • *
  • * Ändere die Antwort nun zu einem gültigen json objekt {"hello" => "world"}. Übergebe dafür ein array der * Methode {@see $this->sendJson()}. *
  • *
  • * Implementiere und nutze die Methode {@see ArticleDao::getArticleById()}, um das entsprechende Artikel-Objekt * aus der Datenbank zu lesen und gebe diese anschliessend im JSON Format zurück. * * Das Article-Objekt kannst du einfach {@see $this->sendJson()} übergeben, um einen validen JSON-Response zu * generieren. *
  • *
  • * Kann der Artikel nicht gefunden werden, werfe eine {@link PageNotFoundException}. *
  • * * * @param int $articleId * @return void * @throws PageNotFoundException if Article could not be found. */ function getDoArticle(int $articleId): void { $article = $this->articleDao->getArticleById($articleId); if ($article === null) { throw new PageNotFoundException('No Article with this id'); } $this->sendJson($article); } /** * Diese Methode kannst du im Browser testen. Pfad: localhost/[ordner name vom projekt]/src-php/public/api/articles * * * * @param string|null $categoryName * @return void */ function getDoArticles(string $categoryName = null): void { if ($categoryName === null) { $articles = $this->articleDao->getArticles(); } else { $articles = $this->articleDao->getArticlesByCategoryName($categoryName); } // if (empty($articles)) { // throw new PageNotFoundException('No such category // no Categories'); // } $this->sendJson($articles); } /** * Speichere einen Artikel. * * * * Nenne die Methode {@see saveArticle(Article $article)} * * @return void */ function postDoNewArticle(ParamBody $body): void { $httpData = $body->parseJsonToHttpData(); $article = new Article(); $result = $this->exec(Bind::attrs($httpData)->toObj($article) ->prop('categoryName', Mappers::cleanString(true), Validators::enum( ['international', 'national', 'sport'])) ->prop('text', Mappers::cleanString(true, maxlength: 9999) ) ->prop('title', Mappers::cleanString(true, minlength: 3, maxlength: 255))); if ($result->hasErrors()) { $result->sendErrJson(); return; } $this->beginTransaction(); $this->articleDao->saveArticle($article); $this->commit(); $this->sendJson($article); } /** * Editiere einen Artikel. * * * * @return void */ function putDoArticle(int $articleId, ParamBody $body): void { $article = $this->articleDao->getArticleById($articleId); if (empty($article)) { throw new PageNotFoundException('invalid article ID'); } $httpData = $body->parseJsonToHttpData(); $result = $this->exec(Bind::attrs($httpData)->toObj($article) ->optProp('categoryName', Validators::enum(['international', 'national', 'sport']), Mappers::valueClosure(function ($categoryNameStr) { return CategoryName::tryFrom($categoryNameStr); })) ->optProp('text', Mappers::cleanString(true, maxlength: 9999) ) ->optProp('title', Mappers::cleanString(true, minlength: 3, maxlength: 255))); if ($result->hasErrors()) { $result->sendErrJson(); return; } $this->beginTransaction(); $this->articleDao->saveArticle($article); $this->commit(); $this->sendJson($article->jsonSerialize()); } /** * Löscht den {@see Article} mit der dazugehörigen Id. * *