Ajoute la gateway des commentaires et corrige les vues

This commit is contained in:
Colin FRIZOT
2022-11-30 10:33:53 +01:00
parent 45eabf2503
commit 9519287329
8 changed files with 145 additions and 1 deletions

View File

@@ -19,6 +19,13 @@ class UserController
{
$newsId = intval($params['id']);
$news = $di->getNewsGateway()->getById($newsId);
return new HttpResponse(200, 'home', ['news' => $news]);
return new HttpResponse(200, 'newsView', ['news' => $news]);
}
public function viewPostComments(DI $di, array $params): HttpResponse
{
$newsId = intval($params['id']);
$comments = $di->getCommentGateway()->getByNewsId($newsId);
return new HttpResponse(200, 'comment', ['comments' => $comments]);
}
}

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Silex\DI;
use Silex\Gateway\NewsGateway;
use Silex\Gateway\CommentGateway;
use PDO;
use Silex\Gateway\UserGateway;
use Silex\Router\Router;
@@ -15,6 +16,7 @@ class DI
private Router $router;
private ?PDO $pdo = null;
private ?NewsGateway $newsGateway = null;
private ?CommentGateway $commentGateway = null;
private ?UserGateway $userGateway = null;
private ?Security $security = null;
@@ -53,6 +55,14 @@ class DI
return $this->security;
}
public function getCommentGateway(): CommentGateway
{
if ($this->commentGateway === null) {
$this->commentGateway = new CommentGateway($this->getPDO());
}
return $this->commentGateway;
}
private function getPDO(): PDO
{
if ($this->pdo === null) {

View File

@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace Silex\Gateway;
use DateTime;
use PDO;
use Silex\Model\Comment;
class CommentGateway
{
private PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
/**
* @return Comment[]
*/
public function getByNewsId(int $id): array
{
$req = $this->pdo->prepare('SELECT * FROM comment WHERE news_id = :id ORDER BY publication_date DESC');
$req->bindValue(':id', $id, PDO::PARAM_INT);
if (!$req->execute()) {
return [];
}
$comments = [];
while ($data = $req->fetch()) {
$comments[] = $this->createComment($data);
}
return $comments;
}
private function createComment(array $data): Comment
{
return new Comment(intval($data['id_comment']),intval($data['news_id']), DateTime::createFromFormat('Y-m-d H:i:s', $data['publication_date']), $data['content'], intval($data['author_id']));
}
}

View File

@@ -49,6 +49,7 @@ class NewsGateway
return $news;
}
private function createNews(array $data): News
{
return new News($data['title'], $data['content'], DateTime::createFromFormat('Y-m-d H:i:s', $data['publication_date']));

View File

@@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace Silex\Model;
use DateTime;
class Comment
{
private int $idComment;
private int $newsId;
private DateTime $publicationDate;
private string $content;
private int $authorId;
public function __construct(int $idComment, int $newsId, DateTime $publicationDate, string $content, int $authorId)
{
$this->idComment = $idComment;
$this->newsId = $newsId;
$this->publicationDate = $publicationDate;
$this->content = $content;
$this->authorId = $authorId;
}
public function getCommentId(): int
{
return $this->idComment;
}
public function getNewsId(): int
{
return $this->newsId;
}
public function getPublicationDate(): DateTime
{
return $this->publicationDate;
}
public function getContent(): string
{
return $this->content;
}
public function getAuthorId(): int
{
return $this->authorId;
}
}