2
respostas

getQueryParams() não retorna email e senha

Na parte de realizar o login idependente de eu digitar ou não um email válido, sempre me retorna email inválido, e no log do servidor sempre me retorna o seguinte erro:

PHP Warning: Undefined array key "email" in C:\Users\Thiago\Desktop\Area de Trabalho para Pastas\alura cursos\Gerenciador de Cursos\src\Controller\RealizarLogin.php on line 31

PHP Warning: Undefined array key "senha" in C:\Users\Thiago\Desktop\Area de Trabalho para Pastas\alura cursos\Gerenciador de Cursos\src\Controller\RealizarLogin.php on line 35

Enfim estou usando o tal do getQueryParams() para substitur $POST['email'] e $POST['senha'] tentei de todas as formas que eu imaginei porém não saio do mesmo lugar

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Usuario;
use Alura\Cursos\Helper\FlashMessageTrait;
use Alura\Cursos\Infra\EntityManagerCreator;
use Doctrine\ORM\EntityManagerInterface;
use Nyholm\Psr7\Response;
use Psr\Http\Message\{ResponseInterface, ServerRequestInterface};
use Psr\Http\Server\RequestHandlerInterface;

class RealizarLogin implements RequestHandlerInterface
{
    use FlashMessageTrait;

    private EntityManagerInterface $entityManager;
    private $repository;

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

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $data = $request->getQueryParams();

        $email = filter_var(
            $data['email'],
            FILTER_VALIDATE_EMAIL
        );

        $senha = $data['senha'];

        if($email === false || is_null($email)){
            $this->defineMensagem('danger', 'O e-mail digitado não é válido');
            return new Response(302, ['Location'=> '/login']);
        }

        $user = $this->repository->findOneBy(
            ['email'=>$email]
        );

        if(is_null($user) || $user->senhaEstaCorreta($senha) === false){
            $this->defineMensagem('danger', 'E-mail ou senha digitado não é válido');
            return new Response(302, ['Location'=> '/login']);
        }

        $_SESSION['logado'] = true;

        return new Response(200, ['Location'=>'/listar-cursos']);

    }
}
2 respostas

Resolvi em partes, pois no meu formulário de envio de email e senha eu estava usando o method="POST" só fiz mudar para methos="GET"

ou seja o método getqueryParams() só retorna a partir do método GET, queria saber como retornar a partir do método post enfim esta ai a resolução

**OBS: a alteração foi feita no formulário de envio !!

<?php require __DIR__."/../inicio-html.php";?>

<form action="/realiza-login" method="GET">
    <div class="form-group">
        <label for="email">E-mail:</label>
        <input type="email" name="email" id="email" class="form-control">
    </div>

    <div class="form-group">
        <label for="senha">Senha:</label>
        <input type="password" name="senha" id="senha" class="form-control">
    </div>

    <button class="btn btn-primary">Entrar</button>
</form>

<?php require __DIR__."/../fim-html.php";?>

Olá, Thiago. Tudo bem?

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

Sobre a sua dúvida:

" o método getqueryParams() só retorna a partir do método GET, queria saber como retornar a partir do método post "

Para você resgatar os dados que vem através do método POST, você pode utilizar da seguinte maneira:

 $corpoDaRequisicao = $request->getParsedBody();
$email = $corpoDaRequisicao['email']
$senha = $corpoDaRequisicao['senha']

Dessa forma acredito que você consiga capturar esses dados.

Apenas uma observação: eu sei que você não sabia como capturar esses dados através do POST, mas dados sensíveis como e-mail e senha não é aconselhável usar o método GET, como você fez, pois esses dados aparecerão na URL.

Espero ter ajudado e bons estudos :)

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