Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eneias.carvalho

Slim Framework POST vázioLi

Recommended Posts

Olá galera.

 

Estou precisando muito de uma ajuda, estou criando uma rest api e resolvi utilizar o Slim, o GET funciona perfeitamente, porem o POST está indo vazio, já segui uns 10 tutorias e sempre gravava apenas o ID na tabela do MySQL, isso por que o mesmo é auto increment, então resolvi verificar o retorno após o inserir, e pude observar que o POST sempre vai vázio, já tentei descobrir o por que e ainda não consegui, já instalei WAMP, XAMP, EasyPHP, Bitnami (pois desconfiava que poderia ser o Apache) porem em nenhum deu certo.

 

Código:

<?php
	/* Require Slim and plugins */
	require 'Slim/Slim/Slim.php';

	/* Register autoloader and instantiate Slim */
	\Slim\Slim::registerAutoloader();
	$app = new \Slim\Slim();

	$app->response()->header('Content-Type', 'application/json;charset=utf-8');
	$app->get('/', function () {
		echo "Helena Starter > Acompanha Fácil API";
	});

	$app->post('/users','addUser');
	$app->get('/users','getUsers');

	$app->run();

	function getConn(){
		return new PDO(
			'mysql:host=localhost;dbname=hs.outjob.acompanhafacil.v100', 
			'root', 
			'',		
			array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
		);
	}

	function addUser(){
		$request = \Slim\Slim::getInstance()->request();
		$user = json_decode($request->getBody());
		$sql = "Insert Into tb_users(nome, usuario, senha) Values(:nome,:usuario,:senha)";
		$conn = getConn();
		$stmt = $conn->prepare($sql);
		$stmt->bindParam("nome",$user->nome);
		$stmt->bindParam("usuario",$user->usuario);
		$stmt->bindParam("senha",$user->senha);
		$stmt->execute();
		$user->id = $conn->lastInsertId();
		echo json_encode(array($user->id));
	}

	function getUsers(){
		$stmt = getConn()->query("Select * From tb_users");
		$users = $stmt->fetchAll(PDO::FETCH_OBJ);
		echo "{users:".json_encode($users)."}";
	}
?>

Script da tabela:

DROP TABLE IF EXISTS `tb_users`;
CREATE TABLE `tb_users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `nome` varchar(60) DEFAULT NULL,
  `usuario` varchar(30) DEFAULT NULL,
  `senha` varchar(255) DEFAULT NULL,
  `tipo` int(255) DEFAULT NULL,
  `fone` varchar(20) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `endereco` varchar(70) DEFAULT NULL,
  `complemento` varchar(20) DEFAULT NULL,
  `numero` varchar(10) DEFAULT NULL,
  `id_cidade` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

Agradeceria muito se alguém pude-se indicar onde está o erro, já verifiquei o .htaccess e aparentemente está normal, não sei mais o que pode ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, primeiramente obrigado pelo seu tempo Beraldo.

 

O teste na realidade já fiz pegando o $request->getBody() e imprimindo na tela, e o mesmo veio vazio, para testar o rest estou utilizando uma ferramenta do chrome.

 

Sou um pouco leigo em PHP, más dentro da função addUser(), não possui $_POST.

 

Lembrando que estou enviando os dados via curl.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou um pouco leigo em PHP, más dentro da função addUser(), não possui $_POST.

Sim, não possui mesmo.

Por isso eu falei pra testar direto com $_POST, pra garantir que não é algum problema interno do Slim.

Apenas adicione:

 

print_r($_POST);

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um array vazio.

Você não está enviando parâmetros no POST. O problema não está no PHP, está na forma como você está fazendo a requisição

 

Um simples teste via cURL no terminal:

 

curl -F "campo=valor" http://seusite.com/users/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com curl deu certo, agora estou com dúvidas se o problema está nas ferramentas que estava utilizando ou no rest, pois utilizei 3 diferentes ferramentas para teste e o resultado era o mesmo, até habilitei o debug no slim e retornou uma mensagem sobre depreciação de função, não recordo ao certo.

 

Parece bobo mas o que pude observar é que com as ferramentas eu envio campo:valor, já com o curl envio campo=valor, isso pode ter algo relacionado com o não post?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com curl deu certo, agora estou com dúvidas se o problema está nas ferramentas que estava utilizando ou no rest

Com certeza é. Afinal, deu certo ao usar curl no terminal

 

 

Parece bobo mas o que pude observar é que com as ferramentas eu envio campo:valor, já com o curl envio campo=valor, isso pode ter algo relacionado com o não post?

Tudo depende de como a aplicação processa os dados.

Não há regra. Você precisa ver na documentação de cada uma qual é o formato correto para envio

Via curl no terminal, é "campo=valor", mas uma aplicação gráfica pode receber em qualquer formato, desde que envie no formato correto depois para o servidor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, peguei uma dica com um colega e estou fazendo o post com o seguinte ContentType: application/x-www-form-urlencoded

 

Dessa vez o $_POST teve retorno, como se o formato Json de envio estive-se inválido, não grava na tabela más resulta em: Array([{"nome":"Fulano de Tal"}] =>)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por merlinus
      Saudações,  pretendo fazer um projeto full restful, qual framework vcs recomendam? tava pensando e usar o Codignite 4
    • Por Alessandro Bodão
      Boa noite irmandade!
       
      Ando reparando de alguns anos pra cá, uma forte tendência em que sites bem dinâmicos e interativos transitam de uma página pra outra sem que a outra página se quer passe por um processo de carregamento, você clica, simplesmente acontece algumas transições nos elementos da página, e de repente, você está em outra página, outro url. De forma suave, nada é carregado, apenas algo acontece e você já está em outra página.
       
      Gostaria de saber como isso é feito pra aplicar em um site que estou desenvolvendo, se é algum framework, alguma ferramenta além do JavaScript...
       
      Trouxe um belo exemplo: https://www.traffic.productions/
       
      Se você chegou até aqui, agradeço desde já!
    • Por Luiz Henrique
      Olá;
       
      Estrou tentando importar a biblioteca Jquery em um projeto que utilizo o slim framework, mas a biblioteca não funciona se a importação dela for na index, (o slim está usando sistema de rotas), não sei se isso influencia em algo, mas para funcionar as aplicações jquery a importação da biblioteca tem que ser na página em uso.
       
      Criei um arquivo teste.js e uma função para dar um alert apenas e funciona até porque o css funciona o problema está com a biblioteca jquery, preciso configurar alguma coisa para que funcione importando ela pela index ou qualquer outro lugar, para que eu possa solicitar apenas 1 vez e não em todas as páginas ao qual utilizarei o jquery?
       
      Obrigado.
    • Por marconde
      O sistemas de rotas nao funciona, embora esteja seguindo os parametros da documentação: https://www.slimframework.com/docs/v3/objects/request.html
      Aparentemente o intelephense (extensao do vscode) aponta o erro para 
      ServerRequestInterface $request
      Já fiz a instalação do Slim framework nas versões:
      composer require slim/slim:3.* composer require slim/slim:4.* composer require slim/slim: "^3.0"  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.