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

Request da entity Medico recebendo 0

Olá.

Meu código refiz na busca do motivo do problema porém persiste. Consultei os fórum com dúvidas similar porém não resolveu no meu caso. Percebi o request-> getContent está chegando vazio. O motivo pode ser a versão PHP utilizada ? Estou usando a versão 7.2. Segue o código para análise.

Grato desde já.

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MedicosController
{
    /**
     * @Route("/medicos")
     */
    public function novo(Request $request): Response
    {
        $corpoRequisicao = $request->getContent();
        $dadoEmJson = json_decode($corpoRequisicao);
        var_dump($corpoRequisicao);
        exit();

        return new JsonResponse($corpoRequisicao);
    }
}
16 respostas

Como você está enviando a requisição, Cleyton?

Olá Vinicius.

Estou usando Postman. Enviando um POST para: localhost:8080/medicos , no corpo:

{    "crm": 123456,
    "nome": "3 medico"    
}

Na resposta está retornando status 200, com :

string(41) "{
    "crm": 123456,
"nome": "3 medico"
}"

Aparentemente está ok o post, porém no método está chegando zerado.

Valeu querido.

Se conhecer algum similar ao Postman para o Mint, posso testar para averiguar se algum problema no Postman. Pois ao enviar o post ele apresenta a seguinte mensagem : Something went wrong while running your scripts. Check Postman Console for more info.

Apesar que o status apresentar como 200.

Agradeço.

Espera que agora eu fiquei confuso.

rsrsrs

"Aparentemente está ok o post, porém no método está chegando zerado."

Não entendi essa frase. Os valores parecem estar chegando corretamente.

Qual o comportamento esperado que não está acontecendo?

Tudo bem ... rsrsrs No postman, ao mandar um POST para o localhost:8080/medicos, com o corpo: { "crm": 784, "nome": "4 medico"} o status apresenta como 200 - OK. Porém no código,

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MedicosController
{
    /**
     * @Route("/medicos")
     */
    public function novo(Request $request): Response
    {
        $corpoRequisicao = $request->getContent();
        $dadoEmJson = json_decode($corpoRequisicao);
        var_dump($corpoRequisicao);
        exit();

        return new JsonResponse($corpoRequisicao);
    }
}

Com var_dumpo na variável: var_dump($corpoRequisicao); acessando o navegador: http://localhost:8080/medicos, o valor retornado do var_dump, apresenta como: string(0) "" .

Resumindo: A variável $corpoRequisicao, está chegando zerado apesar que no postman o status está como 200.

Espero que consegui explicar bem. hehehhe

Mas mais acima você postou isso:

Na resposta está retornando status 200, com :

string(41) "{ "crm": 123456, "nome": "3 medico" }"

Então não sei qual das premissas seguir. rsrs

Na verdade Vinicius, o problema começou apresentar com seguinte código:

<?php

namespace App\Controller;

use App\Entity\Medico;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MedicosController
{
    /**
     * @Route("/medicos")
     * @param Request $request
     * @return Response
     */
    public function novo(Request $request): Response
    {
        $corpoRequisicao = $request->getContent();
        $dadosEmJson= json_decode($corpoRequisicao);

        $medico = new Medico();
        $medico->crm = $dadosEmJson->crm;
        $medico->nome = $dadosEmJson->nome;

        return new JsonResponse($medico);
    }
}

Ao acessar localhost:8080/medicos, aparece o erro:

ErrorException
in src/Controller/MedicosController.php (line 24)

        {
            $corpoRequisicao = $request->getContent();
            $dadosEmJson= json_decode($corpoRequisicao);
            $medico = new Medico();
          Acussa erro nessa parte ->   $medico->crm = $dadosEmJson->crm;
            $medico->nome = $dadosEmJson->nome;
            return new JsonResponse($medico);
        }
    }

StackTrace:

ErrorException: Notice: Trying to get property 'crm' of non-object

at src/Controller/MedicosController.php:24 at App\Controller\MedicosController->novo(object(Request)) (vendor/symfony/http-kernel/HttpKernel.php:157) at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) (vendor/symfony/http-kernel/HttpKernel.php:79) at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true) (vendor/symfony/http-kernel/Kernel.php:191) at Symfony\Component\HttpKernel\Kernel->handle(object(Request)) (public/index.php:25)

Cleyton, o código parece certo.

Como você disse que o Postman parece estar dando erros, testa o Insomnia REST Client ou o AAdvanced REST Client (ARC).

Vê se com eles funciona. Se funcionar, sugiro a reinstalação do Postman...

Vinicius, testei com o Insomnia Rest, porém apresenta o mesmo erro, testei também com versão mais próxima apresentado na aula do Symfony, no caso com 4.4.* porém não resolveu o problema. Não sei o que pode ser. hehehe

Pelo que percebi, o crm e nome do model Medico e também o $dadosEmJson estão chegando como null. Com código:

public function novo(Request $request): Response
    {
        $corpoRequisicao = $request->getContent();
        $dadosEmJson= json_decode($corpoRequisicao);

        $medico = new Medico();
        var_dump($medico,$dadosEmJson);
        exit();
        $medico->crm = $dadosEmJson->crm;

        $medico->nome = $dadosEmJson->nome;
Apresenta  a tela :
object(App\Entity\Medico)#163 (2) { ["crm"]=> NULL ["nome"]=> NULL } NULL 

Valeu pela força.

Consegue me mandar um print da sua requisição montada no postman, por favor?

Percebi também pelo Insomnia que estou enviando object(stdClass porém está recebendo no método objeto com campos null). Ao enviar post, retorna seguinte mensagem no Insomnia:

object(App\Entity\Medico)#95 (2) { ["crm"]=> NULL ["nome"]=> NULL } object(stdClass)#94 (2) { ["crm"]=> int(54646) ["nome"]=> string(12) "teste medico" }

Não sei se interfere o fato de ser stdClass e chegar apenas Object no método.

Valeu.

Fala, Cleyton, pelo seu print, tudo parece certo. No momento do var_dump você ainda não preencheu nada do Medico, por isso está null. Mas o object(stdClass) é o valor retornado pelo json_decode e está com os valores corretos.

Fala Vinicius. hehehe Entendi mas a dúvida é que na aula passou sem erros, o erro da ao rodar e o do print. Qualquer coisa vou continuar a aula dessa forma mesma. Valeu pela força.

https://1drv.ms/u/s!AhoDFrcdnE6RgZEoU5659F1hWcbiRQ

Abraços.

solução!

Mas, Cleyton... Parece que você tá me mostrando 2 exemplos diferentes.

Pensa comigo:

Nesse link você me mandou um print onde $dadosEmJson está corretamente preenchido como um objeto, e possui o crm, certo?

Agora nesse link você me manda um print onde mostra que $dadosEmJson não é um objeto.

Não tá fazendo muito sentido.

Olá Vinicius, Tudo bem ?

Refazendo a aula e por alguma razão está normal aparentemente.

Desde já agradeço pela atenção. Parabéns pela didática.

Valeu.

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