如何使用 php 和 slim-framework 获取 "fk_login_cidadao" 的属性?

how do I get the attributes of "fk_login_cidadao" with php and slim-framework?

我正在开发一个在超薄框架 api 中进行通信的移动应用程序,我需要这个 api 不仅能够读取最简单的属性,还能读取所有那些是 "fk_login_cidadao" 的一部分,我如何使用 Slim 做到这一点?我已经尝试使用 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 \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

use App\Models\Entity\Login;
use App\Models\Entity\Cidadao;


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('App\Models\Entity\Login');
        //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();

根据Slim documentation about request body

JSON requests are converted into associative arrays with 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']);