2017-09-16 7 views
1

私は、スリムフレームワークAPIで通信するモバイルアプリケーションを開発しています。このAPIは、最も単純な属性だけでなく、「fk_login_cidadao」に含まれるすべての属性を読み取るために必要です。これはスリムを使用していますか?私はすでにオブジェクト内の属性にgetParam()を使ってキャプチャを試みましたが、うまくいきませんでした。phpとslim-frameworkを使って "fk_login_cidadao"の属性を取得する方法は?

これは、要求のための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(); 
+0

JSONは右、あなたのAPIに送信された後のデータのですか?また、問題がある部分は '$ login - > setLogin($ request-> getParam( 'login'))です。 $ login - > setEmail($ request-> getParam( 'email')); ... '? – Nima

+0

はい、エラーがあることは分かります。$ login - > setLogin($ request-> getParam( 'login')); $ JSONは私のアプリケーションのモバイルでgson/retrofit2のlibから作られているので、このJSONは私のJAVAクラスと私の表現です($ request-> getParam( 'email')); ...)どのようにオブジェクト "fk_login_cidadao"を読み取るかわからない... –

答えて

0

Slim documentation about request 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']); 
+0

それは私の問題を解決!おかげで@nima –

+0

あなたは大歓迎です。 – Nima

関連する問題