Exibição dos posts de todos os usuários no feed
Planejamento Arquitetural do Sistema
-
View (feed.php):
-
Exibe os posts de todos os usuários em um feed.
-
Itera sobre a lista de posts e renderiza cada um deles com informações como foto de perfil, nome do usuário e imagem do post.
-
-
Controller (get-all-posts.php):
-
Recupera todos os posts do banco de dados utilizando o DAO.
-
Passa os dados dos posts para a view.
-
-
DAO (posts-dao.php):
- Executa a query SQL para buscar todos os posts, juntamente com as informações do usuário que fez o post.
Na prática
Arquivo: Arquivo: view/feed.php
<?php
require_once __DIR__ . '/../dir-config.php';
require_once __DIR__ . '/../src/controllers/posts/get-all-posts.php';
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Página Principal</title>
<link rel="stylesheet" href="<?= BASE_URL ?>public/css/home.css" />
</head>
<body class="home-page">
<?php include __DIR__ . '/components/side-bar.php'; ?>
<!-- Conteúdo Principal -->
<main class="container">
<!-- Seção de Feed de Posts -->
<section class="feed">
<?php if ($posts): ?>
<!-- Itera sobre cada post -->
<?php foreach ($posts as $post): ?>
<article class="post">
<!-- Cabeçalho do Post: Informações do Usuário -->
<header class="user-info">
<!-- Container da Foto de Perfil -->
<div class="avatar" aria-label="Foto do Usuário">
<?php
// Define a foto de perfil do usuário
$profilePhoto = !empty($post['profile_pic_url'])
? BASE_URL . 'uploads/' . htmlspecialchars($post['profile_pic_url'])
: BASE_URL . 'public/img/profile.svg';
?>
<img
src="<?= $profilePhoto; ?>"
alt="Foto de Perfil"
class="profile-picture"
/>
</div>
<!-- Link para o Perfil do Usuário -->
<a
href="<?= BASE_URL ?>view/profile.php?id=<?= htmlspecialchars($post['user_id'] ?? '') ?>"
class="username"
>
<?= htmlspecialchars($post['username'] ?? '') ?>
</a>
</header>
<!-- Container da Imagem do Post -->
<div class="image-placeholder" aria-label="Imagem do Post">
<?php if (!empty($post['photo_url'])): ?>
<!-- Exibe a imagem do post, se houver -->
<img
src="<?= BASE_URL . 'uploads/feed/' . htmlspecialchars($post['photo_url']) ?>"
alt="Imagem do post"
/>
<?php endif; ?>
</div>
</article>
<!-- Divisor entre os posts -->
<hr class="divider" />
<?php endforeach; ?>
<?php else: ?>
<p>0 postagens no seu feed</p>
<?php endif; ?>
</section>
</main>
</body>
</html>
-
Responsabilidade:
-
Exibe os posts de todos os usuários.
-
Itera sobre a lista de posts (
$posts
) e renderiza cada post com:-
Foto de perfil do usuário.
-
Nome do usuário (com link para o perfil).
-
Imagem do post.
-
-
-
Se não houver posts, exibe uma mensagem informando que não há postagens.
Arquivo: src/controllers/posts/get-all-posts.php
<?php
require __DIR__ . '/../../dao/posts-dao.php';
if (!isset($_SESSION['user_id'])) {
header("Location: " . BASE_URL . "view/login.php");
exit;
}
try {
$postsDao = new PostsDao();
$posts = $postsDao->getAllPosts();
} catch (PDOException $e) {
die("Erro ao buscar dados: " . $e->getMessage());
}
-
Responsabilidade:
-
Verifica se o usuário está logado (caso contrário, redireciona para a página de login).
-
Instancia o
PostsDao
e chama o métodogetAllPosts
para recuperar todos os posts. -
Em caso de erro, exibe uma mensagem de erro.
-
Arquivo: src/dao/posts-dao.php
public function getAllPosts() {
$sql = "SELECT p.id, p.photo_url, p.user_id, p.upload_date, p.description, u.username, u.profile_pic_url
FROM posts p
JOIN users u ON p.user_id = u.id
ORDER BY p.upload_date DESC";
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
-
Responsabilidade:
-
Executa uma query SQL para buscar todos os posts, juntamente com as informações do usuário que fez o post (nome e foto de perfil).
-
Ordena os posts pela data de upload (do mais recente para o mais antigo).
-
Retorna um array associativo com os dados dos posts.
-
Fluxo Completo
-
O usuário acessa a página de feed (
feed.php
). -
O controller (
get-all-posts.php
) é chamado para recuperar os posts do banco de dados. -
O controller utiliza o DAO (
posts-dao.php
) para buscar todos os posts. -
Os dados dos posts são passados para a view (
feed.php
). -
A view itera sobre os posts e renderiza cada um deles com as informações do usuário e a imagem do post.
-
Se não houver posts, a view exibe uma mensagem informando que não há postagens.