Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Queria saber como o backend da aplicação devolve a informação

Uma das maiores dúvidas que eu tive, foi na questão de visualização do perfil no menu na minha aplicação com Ionic, eu valido as informações via php e devolvo em json retornando para realizarLogin().

public function loginjson(Request $request){
        $credenciais = Request::all();
        if(Auth::attempt($credenciais)){
            $user = User::where('email' ,'=',$credenciais['email'])->get();
            return $user;
        }else{
            return Response::json('error', 404);
        }
    }

Ele me retorna isso

[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]

Só que não mostra no menu essa informações, lógico que mais para frente vai ser trabalho um perfil mais elegante, porém quero testar o ionic com laravel 5.0, eu consigo lista as informações da mesma maneira.

13 respostas

Outra dúvida também que surgiu você usa dessa maneira para salvar as informações no $rootScope, aqui eu dou console.log fica undefined, mais se eu deixo apenas $rootScope.usuario = dados eu consigo visualizar tranquilo as informações porém a informação se perde quando vai para MenuController.

$rootScope.usuario = dados.usuario;

Outra dúvida também que surgiu você usa dessa maneira para salvar as informações no $rootScope, aqui eu dou console.log fica undefined, mais se eu deixo apenas $rootScope.usuario = dados eu consigo visualizar tranquilo as informações porém a informação se perde quando vai para MenuController.

$rootScope.usuario = dados.usuario;

Oi Yuri, tudo bem? Então, cola pra mim o código de como você está fazendo o request só pra mim entender melhor o processo e poder te ajudar.

service.js

realizarLogin : function(dadosDoLogin){
            return $http.get(url + "loginjson", dadosDoLogin).then(function(response){
                return response.data;
            });
        }

login.controller.js

angular.module('starter')
.controller('LoginController', function($http, $scope, PicklesService, $ionicPopup, $state, $rootScope){

    $scope.login = {};
    $scope.realizarLogin = function(){

        var dadosDoLogin = {
            params : {
                email : $scope.login.email,
                password : $scope.login.password
            }
        }

        PicklesService.realizarLogin(dadosDoLogin).then(function(dados){
            $rootScope.usuario = dados; //Aqui chega as informações mais se eu deixo dados.usuario chega undefined.    
            $state.go('app.todospepinos');

        }, function(erro){
            $ionicPopup.alert({
                title : 'Erro!',
                template : 'Email ou senha incorretos.'
            })

        })

    }


});

Dei um console.log no MenuController assim que está vindo minhas informações. [Object] 0 : Object acesso : 1 email : "yurineves92@gmail.com" id : 1 nome : "yuri" proto : Object length : 1 proto : Array(0)] Código abaixo do MenuController

angular.module('starter')
.controller('MenuController', function($scope,$rootScope){
   $scope.usuarioLogado = $rootScope.usuario;
   console.log($scope.usuarioLogado);
});

Uma das coisas que percebi que no curso do Ionic, no console.log aparecia o objeto usuario, no meu não.

Essa resposta é em JSON? porque fiz o teste no Backend do projeto AluraCar me retornou isso.

{"usuario":{"id":1,"nome":"João da Silva","dataNascimento":"30/01/1990","telefone":"1199887788","email":"joao@alura.com.br"}}

É um JSON sim, mas você deve ver como esse JSON está sendo criado.

Na minha aplicação web retorna dessa maneira.

[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]

Queria saber se existe algo no PHP possa fazer dessa maneira.

Então, a diferença é que o segundo é um array com um objeto dentro e o primeiro, é um objeto com um objeto dentro.

Então eu consegui chegar a isso, usando json_encode, JSON_FORCE_OBJECT

{"0":{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}}
solução!

Você pode fazer o seguinte:

$objUser = json_decode('[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]')[0];

Assim você recupera o objeto na primeira posição do array e depois você pode fazer o seguinte pra ficar igual ao primeiro JSON:

$retorno = new stdClass;
$retorno->usuario = $objUser;
return json_encode($retorno);

O resultado vai ser:

{"usuario":{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}}

Yuri, acredito que esse tópico seja o mesmo que você procura saber nesse outro tópico que você abriu em https://cursos.alura.com.br/forum/topico-tipos-de-respostas-via-json-35986 caso seja, vou solicitar que seja um pouco mais paciente e evite estar duplicando tópicos.