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

Campos Produto e Categoria não aparecem na minha lista

Boa noite; Apos conferir os campos $produto->getProduto() e$produto->getCategoria()->getNome() na minha lista de produtos, no meu ProdutoDao.php, Produto.php e adiciona-produto.php não estou achando o erro onde não aparecem os nomes desses campos na minha lista de produto e quando vou alterar o produto, ambos não aparecem. Pode me ajudar onde estou errando?

Meu guithub: https://github.com/flavio-magela/PHP-O.Objeto

2 respostas

Oi Flávio, tudo bom?

Acho que o problema está no método listaProdutos do seu ProdutoDao.php

No método a gente ta passando categoria_nome pro setNome da categoria, porém essa variavel não existe:

// aqui a gente chama de categoria_id
$categoria_id = $produto_array['categoria_nome'];            

            //instanciar o produtoFactory()
            $factory = new ProdutoFactory();
            $produto = $factory->criaPor($tipoProduto, $produto_array);
            $produto->atualizaBaseadoEm($produto_array);

            $produto->setId($produto_id);
// aqui a gente chama de categoria_nome
            $produto->getCategoria()->setNome($categoria_nome);

Tenta algo como:

function listaProdutos() {

        $produtos = array();
        $resultado = mysqli_query($this->conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id ORDER BY p.nome ASC");

        while($produto_array = mysqli_fetch_assoc($resultado)) {

            $tipoProduto = $produto_array['tipoProduto'];
            $produto_id = $produto_array['id'];
            $categoria_nome = $produto_array['categoria_nome'];

            //instanciar o produtoFactory()
            $factory = new ProdutoFactory();
            $produto = $factory->criaPor($tipoProduto, $produto_array);
            $produto->atualizaBaseadoEm($produto_array);

            $produto->setId($produto_id);
            $produto->getCategoria()->setNome($categoria_nome);

            array_push($produtos, $produto);
        }
        return $produtos;
    }
solução!

A categoria apareceu o campo. Valeu... Tinha colocado $categoria_id = $produto_array['categoria_nome'] e o certo era:

$categoria_nome = $produto_array['categoria_nome'];

Mas no caso do nome do produto tb não estava aparecendo , já que a class ProdutoFactory que cria um produto e na hora de mostrar na lista o campo não aparecia. Tinha trocado o $produtoNome = $params['produto']; e o correto era: $produtoNome = $params['nome'];

<?php 
class ProdutoFactory {

    private $classes = array("Produto", "Ebook", "LivroFisico");

    public function criaPor($tipoProduto, $params) {

        $produtoNome = $params['nome'];
        $preco = $params['preco'];
        $descricao = $params['descricao'];
        $categoria = new Categoria();
        $usado = $params['usado'];

        if (in_array($tipoProduto, $this->classes)) {
            return new $tipoProduto($produtoNome, $preco, $descricao, $categoria, $usado);
        } else {

            return new Produto($produtoNome, $preco, $descricao, $categoria, $usado);
        }
    }
}
?>

Consegui resolver o meu problema com ajuda de vcs. Obrigado;Às vezes vc passa horas tentando achar o problema, quando vc pede ajuda a outra pessoa, ela consegue visualizar algo que vc passou horas tentando achar e não teve êxito... ou um simples descanso e depois vc volta para aquela assunto vc consegue enxergar melhor o problema... mais uma vez obrigado pela força.