3
respostas

Bando de dados com Table com nomes diferentes

Olá, como forma de estudo resolvi fazer um sistema de Ordem de Serviços, implementei a função para cadastrar usuarios novos e um sistema de login administrativo.

Entretanto para isso tive que alterar o nome da table de cursos para ordem, porém não consigo fazer de jeito nenhum meu sistema reconhecer a nova estrutura de banco de dados.

Alguém pode me dar uma luz ?

Segue o erro Next Doctrine\DBAL\Driver\PDO\Exception: SQLSTATE[HY000]: General error: 1 no such table: cursos in C:\Users\erick.dias\Documents\Project-Training\vendor\doctrine\dbal\src\Driver\PDO\Exception.php:28

3 respostas

Resolvi o problema descrito acima, entretanto estou com outro no qual diz que estou passando um valor null quando vou dar um persist para cadastrar o usuario.

o meu controller CadastrarUsuario está abaixo:

<?php

namespace Erick\Sistema\Controller;

use Nyholm\Psr7\Response; use Erick\Sistema\Entity\Usuario; use Psr\Http\Message\ResponseInterface; use Doctrine\ORM\EntityManagerInterface; use Erick\Sistema\Helper\FlashMessageTrait; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface;

class CadastrarUsuario implements RequestHandlerInterface { use FlashMessageTrait;

public function __construct(EntityManagerInterface $entityManager)
{
    $this->repositorioDeUsuarios = $entityManager
        ->getRepository(Usuario::class);
}

public function handle(ServerRequestInterface $request): ResponseInterface
{
    $redirecionamentoCadastro = new Response(302, ['Location' => '/cadastro']);

    $usuario = new Usuario();

    $email = filter_input(
        INPUT_POST,
        'email',
        FILTER_VALIDATE_EMAIL
    );

    $senha = filter_input(
        INPUT_POST,
        'senha',
        FILTER_SANITIZE_SPECIAL_CHARS
    );

    $senha2 = filter_input(
        INPUT_POST,
        'senha2',
        FILTER_SANITIZE_SPECIAL_CHARS
    );

    $encontraEmail = $this->repositorioDeUsuarios->findOneBy(['email' => $email]);

    if(!is_null($encontraEmail)){
        $this->defineMensagem('danger', 'E-mail já está cadastrado');

        return $redirecionamentoCadastro;
    }  

    if(strlen(trim($senha)) < 6  && strlen(trim($senha2)) < 6 ){
        $this->defineMensagem('danger', 'Insira uma senha maior que 6 digitos');

        return $redirecionamentoCadastro;
    }

    if($senha !== $senha2){

        $this->defineMensagem('danger', 'As senhas não são iguais');

        return $redirecionamentoCadastro;
    }

    $usuario->setEmail($email);
    $senha = password_hash($senha, PASSWORD_ARGON2I); //Criptografando senha
    $usuario->setSenha($senha);
    $this->entityManager->persist($usuario);
    $this->entityManager->flush();
    $this->defineMensagem('sucess', 'Usuario criado com sucesso');

    return $redirecionamentoCadastro;

}

}

o erro que retorna:

Warning: Undefined property: Erick\Sistema\Controller\CadastrarUsuario::$entityManager in C:\Users\erick.dias\Documents\Project-Training\src\Controller\CadastrarUsuario.php on line 73

Fatal error: Uncaught Error: Call to a member function persist() on null in C:\Users\erick.dias\Documents\Project-Training\src\Controller\CadastrarUsuario.php:73 Stack trace: #0 C:\Users\erick.dias\Documents\Project-Training\public\index.php(45): Erick\Sistema\Controller\CadastrarUsuario->handle(Object(Nyholm\Psr7\ServerRequest)) #1 {main} thrown in C:\Users\erick.dias\Documents\Project-Training\src\Controller\CadastrarUsuario.php on line 73

Aqui segue um var_dump do objeto Usuarios que estou tentando dar persist no banco.

object(Erick\Sistema\Entity\Usuario)#105 (3) { ["id"]=> NULL ["email":"Erick\Sistema\Entity\Usuario":private]=> string(21) "erick@alura.com.br" ["senha":"Erick\Sistema\Entity\Usuario":private]=> string(96) "$argon2i$v=19$m=65536,t=4,p=1$N3Zrb3UuTGdUL1k2Zm02YQ$9wcNxyrCf5oVlKYYNAx8S5fZJ826xAI0z4QkE/jeJqM" }

Olá, Erick. Tudo bem?

Gostaria de pedir desculpas pela demora em responder o seu tópico.

O erro que você está recebendo indica que a propriedade $entityManager está sendo considerada como indefinida na linha 73 do seu código. No construtor da classe CadastrarUsuario, você está recebendo o EntityManagerInterface como parâmetro, mas você não está armazenando esse valor em nenhuma propriedade da classe.

Para corrigir o problema, você precisa atribuir o valor recebido pelo construtor à propriedade $entityManager. Adicione o seguinte código no construtor da classe:

public function __construct(EntityManagerInterface $entityManager)
{
    $this->repositorioDeUsuarios = $entityManager
        ->getRepository(Usuario::class);
    $this->entityManager = $entityManager; // Adicione esta linha
}

Veja se essa solução resolve o problema :)

Espero ter ajudado e bons estudos!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software