Segui o passo a passo da aula, mas quando deixo de preencher o campo Título, ele não retorna o erro "Título não informado", ele apenas exibe um alerta no campo com "Preencha o campo".
Segue abaixo os códigos do programa:
Pedaço do código da view inicio-html.php:
<?php if (isset($_SESSION['error_message'])): ?>
<h2 class="formulario__titulo erro">
<?= $_SESSION['error_message']; ?>
<?php unset($_SESSION['error_message']); ?>
</h2>
<?php endif; ?>
Código do controller NewVideoController.php:
<?php
declare(strict_types=1);
namespace Alura\Mvc\Controller;
use Alura\Mvc\Entity\Video;
use Alura\Mvc\Repository\VideoRepository;
class NewVideoController implements Controller
{
public function __construct(private VideoRepository $videoRepository)
{
}
public function processaRequisicao(): void
{
$url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL);
if ($url === false) {
$_SESSION['error_message'] = "URL inválida.";
header('Location: /novo-video');
return;
}
$titulo = filter_input(INPUT_POST, 'titulo');
if ($titulo === false) {
$_SESSION['error_message'] = "Título não informado.";
header('Location: /novo-video');
return;
}
$video = new Video($url, $titulo);
if ($_FILES['image']['error'] === UPLOAD_ERR_OK) {
$safeFileName = uniqid('upload_') . '_' . pathinfo($_FILES['image']['name'], PATHINFO_BASENAME);
// Verificar o tipo de arquivo usando uma biblioteca mais robusta
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mineType = $finfo->file($_FILES['image']['tmp_name']);
if(str_starts_with($mineType, 'image/')){
move_uploaded_file(
$_FILES['image']['tmp_name'],
__DIR__ . '/../../public/img/uploads/' . $safeFileName
);
$video->setFilePath($safeFileName);
}
}
$success = $this->videoRepository->add($video);
if ($success === false) {
$_SESSION['error_message'] = "Erro ao cadastrar vídeo.";
header('Location: /novo-video');
} else {
header('Location: /?sucesso=1');
}
}
}