Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

A imagem não é exibida na tela

Oi pessoal,

Alguém teve algum problema na hora de exibir a imagem inserida no banco de dados? Consultei no banco e o nome do arquivo aparece salvo e, na pasta uploads

Tentei depurar pra ver o resultado obtido mas não consegui resolver

Imagem do vscode para exibir a miniatura

O erro apresentado em tela Erro apresentado em tela da imagem inserida

Controller

    $user = new Users($name, $username, $category);     // cria um usuário para ser inserido
    if ($_FILES['image']['error'] === UPLOAD_ERR_OK) {  // com a variável global FILES verifica se não há erros
        move_uploaded_file(                             // move um arquivo do diretório tmp do php para a pasta    
            $_FILES['image']['tmp_name'],
            __DIR__ . './../../public/img/uploads/' . $_FILES['image']['name']
        );
        $user->setFilePath($_FILES['image']['name']);   // define um nome para o arquivo
    }

Repository

public function add(Users $user): bool
    {
        $sql = 'INSERT INTO users (name, username, category, image_path) VALUES (?, ?, ?, ?)';
        $statement = $this->pdo->prepare($sql);
        $statement->bindValue(1, $user->name);
        $statement->bindValue(2, $user->username);
        $statement->bindValue(3, $user->category);
        $statement->bindValue(4, $user->getFilePath());

        $result = $statement->execute();
        $id = $this->pdo->lastInsertId();

        $user->setId(intval($id));
        return $result;
    }

    public function update(Users $user): bool
    {
        $updateImageSql = '';
        if ($user->getFilePath() !== null) {
            $updateImageSql = ', image_path = :image_path';
        }

        $sql = "UPDATE users SET name = :name, username = :username, category = :category $updateImageSql WHERE id = :id";
        $statement = $this->pdo->prepare($sql);

        $statement->bindValue(':name', $user->name);
        $statement->bindValue(':username', $user->username);
        $statement->bindValue(':category', $user->category);
        $statement->bindValue(':id', $user->id, PDO::PARAM_INT);
        if ($user->getFilePath() !== null) {
            $statement->bindValue(':image_path', $user->getFilePath());
        }

        return $statement->execute();
    }

    private function hydrate(array $userData): Users
    {
        $user = new Users($userData['name'], $userData['username'], $userData['category']);
        $user->setId($userData['id']);

        if ($user['image_path'] !== null) {                // a linha 90 aponta aqui
            $user->setFilePath($user['image_path']);
        }

        return $user;
    }
6 respostas
solução!

Olá, Rodrigo, tudo bem?

Pelo que entendi, na linha 90, você está tentando acessar uma propriedade do objeto $user como se fosse um array, o que pode estar gerando o erro apresentado em tela.

Para corrigir esse problema, sugiro que você altere a linha 90 e 91 para:

if ($userData['image_path'] !== null) {
    $user->setFilePath($userData['image_path']);
}

A partir disso, você estará acessando corretamente a propriedade image_path do array userData invés do objeto user.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

Oi Vinicius, boa tarde

Eu tentei isso logo depois que enviei a pergunta, revi a aula e fiz esse ajuste também Valeu o retorno ai o/

Com isso, não dá mais o erro mas ainda não exibe na tela, diz que não encontra o caminho do arquivo.

E ao utilizar o autocomplete do vscode, a definição do caminho parece está ok Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E minha classe User com os métodos definidos Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Travei nisso aqui =/

Rodrigo, acho que você se confundiu na chamada dos métodos, você está tentando chamar o método getPathFile(), porém ele não existe. O método que existe é o getFilePath()

Caraca man, que vacilooooooooo

Minha vista tá muito cansada já, não vi mesmo isso valeu kkkkk..

E sobre a imagem aparecer com erro, como se não existisse? Preciso dar alguma permissão?! Ao fazer a alteração, o retorno na tela fica assim

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Testei aqui e tirei o public da listagem da imagem. Funcionou o/

Valeu ai Vinicius

Que bom que conseguiu!! Parabéns! :D

Bons estudos!