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

Erro página inicial

Página inicial está dando este erro:

Warning: Missing argument 2 for Vendor\DAO\PostagemDAO::__construct(), called in /opt/lampp/htdocs/miniblog/Vendor/Controller/LoginController.php on line 21 and defined in /opt/lampp/htdocs/miniblog/Vendor/DAO/PostagemDAO.php on line 11

Notice: Undefined variable: usuarioDao in /opt/lampp/htdocs/miniblog/Vendor/DAO/PostagemDAO.php on line 13

Fatal error: Class 'Vendor\Controller\UsuarioValidator' not found in /opt/lampp/htdocs/miniblog/Vendor/Controller/LoginController.php on line 22
3 respostas

Oi Carlos, você poderia postar o código dos arquivos com erro aqui pra gente verificar melhor?

Segue códigos Macêdo: PostagemDAO:

OBS:

<?php

namespace Vendor\DAO;
use Vendor\Model\Postagem;
use Vendor\DAO\UsuarioDAO;

class PostagemDAO{
    private $con;
    private $UsuarioDao;

    public function __construct($con,$usuarioDao){
        $this->con = $con;
        $this->usuarioDao = $usuarioDao;
    }

    public function adiciona(Postagem $postagem, $usuarioId){
        $query = "INSERT INTO Postagem (conteudo, data, usuarioId) VALUES (
        '".mysql_real_escape_string($postagem->getConteudo())."',
        '".mysql_real_escape_string($postagem->getData())."',
        '".mysql_real_escape_string($usuarioId)."')";

        return mysql_query($query);
    }

    public function altera(Postagem $postagem){
        $query = "UPDATE Postagem SET 
        conteudo='".mysql_real_escape_string($postagem->getConteudo())."' 
        WHERE id='".mysql_real_escape_string($postagem->getId())."'";

        return mysql_query($query);
    }

    public function remove($id){
        $query = "DELETE FROM Postagem WHERE id = {$id}";
        $result = mysql_query($query);
        return $result;
    }

    public function lista($id){
        $query = "SELECT * FROM Postagem WHERE usuarioId = {$id} ORDER BY id DESC";
        $result = mysql_query($query);
        $postagens = array();
        while ($postagem = mysql_fetch_object($result,'Vendor\Model\Postagem')) {
            $postagem->setData(date("d/m/Y", strtotime($postagem->getData())));

            array_push($postagens, $postagem);
        }
        return $postagens;
    }
    public function postsPorSemana($usuarioId) {
        $query = "SELECT * FROM Postagem WHERE usuarioId = {$usuarioId}";
        $result = mysql_query($query);

        $postagens = array();

        while ($postagem = mysql_fetch_object($result,'Vendor\Model\Postagem')) {
            array_push($postagens, $postagem);
        }

        $numeroDePostagens = sizeof($postagens);

        $hoje = new \DateTime(date("Y-m-d"));

        $dataDeIngresso = new \dateTime($this->usuarioDao->buscaPorId($usuarioId)->getDataDeIngresso());

        $diferenca = ($hoje->diff($dataDeIngresso)->days == 0) ? 1 
                    : ($hoje->diff($dataDeIngresso)->days/7);

        return ($numeroDePostagens / $diferenca);
    }
}

LoginController:

<?php
namespace Vendor\Controller;

use Vendor\DAO\UsuarioDAO;
use Vendor\DAO\PostagemDAO;
use Vendor\Factory\ConnectionFactory;
use Vendor\Lib\View;
use Vendor\Model\Login;
use Vendor\Model\Usuario;
use Vendor\Lib\Validator;

class LoginController{
    private $usuarioDao;
    private $postagemDao;
    private $login;
    private $validator;

    public function __construct(){
        $con = ConnectionFactory::getConnection();
        $this->usuarioDao = new UsuarioDAO($con);    
        $this->postagemDao = new PostagemDAO($con);    
        $this->validator = new UsuarioValidator();
    }

    public function index(){

        $view = new View('index','Login');
        return $view;
    }

    public function login(){
        $usuario = $this->usuarioDao->login($_POST["email"], $_POST["senha"]);

        if($usuario == null) {
            $view = new View('index','Login');
            $view->viewBag('error','Usuário ou senha inválido.');
            return $view;
        } else {
            Login::logaUsuario($usuario);
            header("Location: index.php?c=Index&m=index&usuarioId=".$usuario->getId()."");
        }

    }
    public function logout(){
        Login::logout();
        header("Location: index.php");
    }

    public function register(){
        $usuario = new Usuario();
        $nome = $_POST["nome"];
        $email = $_POST["email"];
        $senha = $_POST["senha"];
        $bio = $_POST["bio"];

        $usuario->setNome($nome);
        $usuario->setEmail($email);
        $usuario->setSenha($senha);
        $usuario->setBio($bio);

        $view = new View('index','Login');

        if($this->validator->validaUsuario($usuario)){

            $usuario = $this->usuarioDao->adiciona($usuario);
            $view->viewBag('register','Usuario registrado com sucesso!');
        }
        else{
            $view->viewBag('register','nome ou email já existente');
        }
        return $view;
    }
}
solução!

Olá Carlos, tudo bom?

no PostagemDAO o atributo esta:

    private $UsuarioDao;

deveria ser:

    private $usuarioDao;

E no construtor do PostagemDAO estamos pedindo 2 argumentos:

    public function __construct($con,$usuarioDao){...

Mas no LoginController estamos passando apenas 1:

 public function __construct(){
        $con = ConnectionFactory::getConnection();
        $this->usuarioDao = new UsuarioDAO($con);    
        $this->postagemDao = new PostagemDAO($con);    
        $this->validator = new UsuarioValidator();
    }

Devemos passar também o usuarioDao:

 public function __construct(){
        $con = ConnectionFactory::getConnection();
        $this->usuarioDao = new UsuarioDAO($con);    
        $this->postagemDao = new PostagemDAO($con,$this->usuarioDao);    
        $this->validator = new UsuarioValidator();
    }

espero ter ajudado.