Agora que implementamos a área logada e a autenticação, é hora de criar o painel administrativo para gerenciar os posts do blog. Essa funcionalidade permitirá que usuários autenticados adicionem, editem e excluam postagens diretamente pelo sistema.
Configurando as Rotas para o Painel Administrativo
Antes de criar o painel, precisamos definir as rotas que permitirão a listagem, criação, edição e exclusão de posts. No arquivo app/Config/Routes.php
, adicione:
$routes->group('admin', ['filter' => 'auth'], function($routes) {
$routes->get('posts', 'AdminPostController::index');
$routes->get('posts/novo', 'AdminPostController::novo');
$routes->post('posts/criar', 'AdminPostController::criar');
$routes->get('posts/editar/(:num)', 'AdminPostController::editar/$1');
$routes->post('posts/atualizar/(:num)', 'AdminPostController::atualizar/$1');
$routes->get('posts/excluir/(:num)', 'AdminPostController::excluir/$1');
});
Isso garante que todas as ações do painel administrativo estejam protegidas pela autenticação.
Criando o Controller para Administração de Posts
No diretório app/Controllers/
, crie o arquivo AdminPostController.php
:
namespace App\Controllers;
use App\Models\PostModel;
use CodeIgniter\Controller;
class AdminPostController extends Controller
{
public function index()
{
$model = new PostModel();
$data['posts'] = $model->findAll();
return view('admin/posts/lista', $data);
}
public function novo()
{
return view('admin/posts/novo');
}
public function criar()
{
$model = new PostModel();
$model->insert([
'titulo' => $this->request->getPost('titulo'),
'conteudo' => $this->request->getPost('conteudo'),
'autor' => session()->get('usuario_logado')
]);
return redirect()->to('/admin/posts')->with('sucesso', 'Post criado com sucesso!');
}
public function editar($id)
{
$model = new PostModel();
$data['post'] = $model->find($id);
return view('admin/posts/editar', $data);
}
public function atualizar($id)
{
$model = new PostModel();
$model->update($id, [
'titulo' => $this->request->getPost('titulo'),
'conteudo' => $this->request->getPost('conteudo')
]);
return redirect()->to('/admin/posts')->with('sucesso', 'Post atualizado com sucesso!');
}
public function excluir($id)
{
$model = new PostModel();
$model->delete($id);
return redirect()->to('/admin/posts')->with('sucesso', 'Post excluído com sucesso!');
}
}
Criando as Views do Painel Administrativo
No diretório app/Views/admin/posts/
, crie as views:
Listagem de Posts (lista.php
)
<h1>Gerenciar Posts</h1>
<a href="<?= site_url('admin/posts/novo') ?>">Criar Novo Post</a>
<?php foreach ($posts as $post) : ?>
<p><strong><?= esc($post['titulo']) ?></strong></p>
<a href="<?= site_url('admin/posts/editar/'.$post['id']) ?>">Editar</a> |
<a href="<?= site_url('admin/posts/excluir/'.$post['id']) ?>" onclick="return confirm('Tem certeza?');">Excluir</a>
<?php endforeach; ?>
Formulário de Criação (novo.php
)
<h1>Novo Post</h1>
<form action="<?= site_url('admin/posts/criar') ?>" method="post">
<label>Título:</label>
<input type="text" name="titulo" required><br>
<label>Conteúdo:</label>
<textarea name="conteudo" required></textarea><br>
<button type="submit">Salvar</button>
</form>
Formulário de Edição (editar.php
)
<h1>Editar Post</h1>
<form action="<?= site_url('admin/posts/atualizar/'.$post['id']) ?>" method="post">
<label>Título:</label>
<input type="text" name="titulo" value="<?= esc($post['titulo']) ?>" required><br>
<label>Conteúdo:</label>
<textarea name="conteudo" required><?= esc($post['conteudo']) ?></textarea><br>
<button type="submit">Atualizar</button>
</form>
Conclusão
Com esse painel administrativo, os usuários autenticados podem gerenciar os posts do blog diretamente pelo sistema, sem a necessidade de alterar o banco de dados manualmente.
Nos próximos posts, vamos aprimorar ainda mais essa funcionalidade, incluindo a possibilidade de adicionar imagens aos posts e melhorar a interface administrativa.
Se você ou sua empresa precisa de suporte para desenvolvimento com CodeIgniter 4, a Saldaris Consultoria pode ajudar. Entre em contato pelo formulário no final da página para saber mais sobre nossos serviços.