我正在开发一个带有纤细框架API通信的移动应用程序,我需要此API不仅能够读取最简单的属性,还可以读取所有部分的属性在" FK_LOGIN_CIDADAO"中,我该如何使用Slim?我已经尝试在对象内的属性上使用getParam()捕获getParam(),但它不起作用。
这是请求的JSON数据:
{"cidade":"Juazeiro do Norte","estado":"Ceará","fk_login_cidadao":{
"administrador":false,
"email":"a",
"login":"a",
"senha":"a",
"status_login":false}, "nome":"a","sexo":"Masculino", "sobrenome":"a"}
这是我处理请求的功能PHP代码:
<?php
use PsrHttpMessageServerRequestInterface as Request;
use PsrHttpMessageResponseInterface as Response;
use AppModelsEntityLogin;
use AppModelsEntityCidadao;
require 'bootstrap.php';
$app -> post('/cidadao/cadastrar', function(Request $request, Response $response) use ($app){
//Container do EntityManager
$entityManager = $this -> get('em');
try{
//Instância da entidade Login
$login = new Login();
//setando valores do objeto login
$login ->setLogin($request->getParam('login'));
$login ->setEmail($request->getParam('email'));
$login ->setSenha($request->getParam('senha'));
$login ->setStatus_login($request->getParam('status_login'));
$login ->setAsAdministrador($request->getParam('administrador'));
//salvando login
$entityManager->persist($login);
$entityManager->flush();
//buscando login recém salvo
$loginRepository = $entityManager->getRepository('AppModelsEntityLogin');
//pegando login
$loginCidadao = $loginRepository->find($login->getId_login());
//Instância da entidade Cidadao
$cidadao = new Cidadao();
//setando valores do objeto cidadao
$cidadao ->setFk_login_cidadao($loginCidadao);
$cidadao->setNome($request->getParam('nome'));
$cidadao->setSexo($request->getParam('sexo'));
$cidadao ->setSobrenome($request->getParam('sobrenome'));
$cidadao ->setEstado($request->getParam('estado'));
$cidadao ->setCidade($request->getParam('cidade'));
$cidadao ->setDir_foto_usuario($request->getParam('dir_foto_usuario'));
//salvando cidadao
$entityManager->persist($cidadao);
$entityManager->flush();
//retornando confirmação do evento completo
return $response->withJson(["int" =>(int)'1'],200);
} catch (Exception $e){
//código e mensagem do erro
$error = array (
'Code:' => $e->getCode(),
'Message' => $e->getMessage()
);
//retornando o erro ao cliente
return $response->withJson($error);
}
});
$app->run();
根据有关请求body的细长文档
JSON请求与JSON_DECODE($ INPUT,true)转换为关联数组。
和$request->getParam('fk_login_cidadao')
应该为您提供一个与您需要的密钥的关联数组。
所以而不是
$login ->setLogin($request->getParam('login'));
$login ->setEmail($request->getParam('email'));
$login ->setSenha($request->getParam('senha'));
$login ->setStatus_login($request->getParam('status_login'));
$login ->setAsAdministrador($request->getParam('administrador'));
尝试:
$fk_login_cidadao = $request->getParam('fk_login_cidadao');
$login ->setLogin($fk_login_cidadao['login']);
$login ->setEmail($fk_login_cidadao['email']);
$login ->setSenha($fk_login_cidadao['senha']);
$login ->setStatus_login($fk_login_cidadao['status_login']);
$login ->setAsAdministrador($fk_login_cidadao['administrador']);