Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Aula 7 - Desafio

Bom dia Vinicius,

Fiz o desafio que você propôs na aula e ocorre que toda resposta que eu retorno em qualquer uma das controllers é exibido o erro abaixo, não consegui resolver esse erro.

Fatal error: Uncaught InvalidArgumentException: Header name must be an RFC 7230 compatible string. in C:\Users\User\gerenciador-de-cursos\vendor\nyholm\psr7\src\MessageTrait.php:174 Stack trace: #0 C:\Users\User\gerenciador-de-cursos\vendor\nyholm\psr7\src\MessageTrait.php(141): Nyholm\Psr7\Response->validateAndTrimHeader('Location:', '/listar-cursos') #1 C:\Users\User\gerenciador-de-cursos\vendor\nyholm\psr7\src\Response.php(48): Nyholm\Psr7\Response->setHeaders(Array) #2 C:\Users\User\gerenciador-de-cursos\src\Controller\Exclusao.php(47): Nyholm\Psr7\Response->__construct(302, Array) #3 C:\Users\User\gerenciador-de-cursos\public\index.php(51): Alura\Cursos\Controller\Exclusao->handle(Object(Nyholm\Psr7\ServerRequest)) #4 {main} thrown in C:\Users\User\gerenciador-de-cursos\vendor\nyholm\psr7\src\MessageTrait.php on line 174
<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Curso;
use Alura\Cursos\Helper\FlashMessageTrait;
use Doctrine\ORM\EntityManagerInterface;
use Nyholm\Psr7\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

class Persistencia implements RequestHandlerInterface
{
    use FlashMessageTrait;
    /**
     * @var \Doctrine\ORM\EntityManagerInterface
     */
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $descricao = filter_var(
            $request->getParsedBody()['descricao'],
            FILTER_SANITIZE_STRING
        );
        if(isset($request->getQueryParams()['id'])) {
            $id = filter_var(
                $request->getQueryParams()['id'],
                FILTER_VALIDATE_INT
            );
        }else{
            $id = null;
        }

        $curso = new Curso();
        $curso->setDescricao($descricao);
        //para atualizar é feito um merge com o que estou passando e o que temos no banco.
        if (!is_null($id) && $id !== false) {
            $curso->setId($id);
            $this->entityManager->merge($curso);
            $this->defineMensagem("success", "Curso alterado com sucesso!");
        } else {
            $this->entityManager->persist($curso);
            $this->defineMensagem("success", "Curso inserido com sucesso!");
        }
        $this->entityManager->flush();
        return new Response(302,['Location:' => '/listar-cursos']);
    }


}
1 resposta
solução

Fala, Franklin.

Só remover o : depois de Location no seu header. ;-)